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.
- package/README.md +3 -7
- package/dist/dashboard/assets/{_basePickBy-DZR484hj.js → _basePickBy-DiDMiru0.js} +1 -1
- package/dist/dashboard/{dist/assets/_baseUniq-Bwm426M6.js → assets/_baseUniq-CFoKRFhS.js} +1 -1
- package/dist/dashboard/{dist/assets/arc-51ef6HeW.js → assets/arc-B2fWu2mo.js} +1 -1
- package/dist/dashboard/{dist/assets/architectureDiagram-VXUJARFQ-Boahc5dR.js → assets/architectureDiagram-VXUJARFQ-DpIe4yWB.js} +1 -1
- package/dist/dashboard/assets/{blockDiagram-VD42YOAC-BvkiW8lj.js → blockDiagram-VD42YOAC-CKAgfH2X.js} +1 -1
- package/dist/dashboard/{dist/assets/c4Diagram-YG6GDRKO-Bww0QPxL.js → assets/c4Diagram-YG6GDRKO-CUtb-R__.js} +1 -1
- package/dist/dashboard/assets/channel-B9iMjZmm.js +1 -0
- package/dist/dashboard/assets/{chunk-4BX2VUAB-BrU7mtb9.js → chunk-4BX2VUAB-C3CSqwcX.js} +1 -1
- package/dist/dashboard/assets/{chunk-55IACEB6-DwsmCNp_.js → chunk-55IACEB6-CV8VzOOp.js} +1 -1
- package/dist/dashboard/{dist/assets/chunk-B4BG7PRW-B7YfMggR.js → assets/chunk-B4BG7PRW-URwnN3Q_.js} +1 -1
- package/dist/dashboard/{dist/assets/chunk-DI55MBZ5-B-xsiGYI.js → assets/chunk-DI55MBZ5-CV_d-z8j.js} +1 -1
- package/dist/dashboard/assets/{chunk-FMBD7UC4-DRb5NEMr.js → chunk-FMBD7UC4-8DJI9OkS.js} +1 -1
- package/dist/dashboard/assets/{chunk-QN33PNHL-BRSlHScq.js → chunk-QN33PNHL-pVzUBBoU.js} +1 -1
- package/dist/dashboard/assets/{chunk-QZHKN3VN-Cix7nLqx.js → chunk-QZHKN3VN-DCGN273N.js} +1 -1
- package/dist/dashboard/assets/{chunk-TZMSLE5B-BtXpcWN4.js → chunk-TZMSLE5B-D0wY-rJ0.js} +1 -1
- package/dist/dashboard/assets/classDiagram-2ON5EDUG-BNi5TogT.js +1 -0
- package/dist/dashboard/assets/classDiagram-v2-WZHVMYZB-BNi5TogT.js +1 -0
- package/dist/dashboard/assets/clone-m2eeeKVa.js +1 -0
- package/dist/dashboard/{dist/assets/cose-bilkent-S5V4N54A-BUkL7Wtq.js → assets/cose-bilkent-S5V4N54A-BIRyRYk0.js} +1 -1
- package/dist/dashboard/assets/{dagre-6UL2VRFP-DgEqrxGj.js → dagre-6UL2VRFP-KVIfxT9V.js} +1 -1
- package/dist/dashboard/assets/{diagram-PSM6KHXK-Y-M5J_PO.js → diagram-PSM6KHXK-VUmdxoiM.js} +1 -1
- package/dist/dashboard/assets/{diagram-QEK2KX5R-BXMS0hEZ.js → diagram-QEK2KX5R-LQ9k2vBy.js} +1 -1
- package/dist/dashboard/{dist/assets/diagram-S2PKOQOG--oRtrIMC.js → assets/diagram-S2PKOQOG-DIDe2of5.js} +1 -1
- package/dist/dashboard/{dist/assets/erDiagram-Q2GNP2WA-D0MbudeO.js → assets/erDiagram-Q2GNP2WA-CpMIyDcr.js} +1 -1
- package/dist/dashboard/{dist/assets/flowDiagram-NV44I4VS-1j044bLK.js → assets/flowDiagram-NV44I4VS-DR2nUASu.js} +1 -1
- package/dist/dashboard/assets/{ganttDiagram-JELNMOA3-Cjy_BOl2.js → ganttDiagram-JELNMOA3-C3J3WvDp.js} +1 -1
- package/dist/dashboard/{dist/assets/gitGraphDiagram-V2S2FVAM-CuJ5l3TK.js → assets/gitGraphDiagram-V2S2FVAM-C5V2Xlzu.js} +1 -1
- package/dist/dashboard/assets/{graph-BVGuJ5gs.js → graph-GSdi8Xy9.js} +1 -1
- package/dist/dashboard/{dist/assets/index-D3sRJga7.js → assets/index-Bhd7ZvcY.js} +82 -82
- package/dist/dashboard/assets/{infoDiagram-HS3SLOUP-CxmZGT-4.js → infoDiagram-HS3SLOUP-DVP1dWh4.js} +1 -1
- package/dist/dashboard/{dist/assets/journeyDiagram-XKPGCS4Q-8hUcTxo0.js → assets/journeyDiagram-XKPGCS4Q-CNHD7swq.js} +1 -1
- package/dist/dashboard/{dist/assets/kanban-definition-3W4ZIXB7-BvWm-0QQ.js → assets/kanban-definition-3W4ZIXB7-C-Jc4Ozy.js} +1 -1
- package/dist/dashboard/{dist/assets/layout-BFZ0bRU2.js → assets/layout-B0rNqEfo.js} +1 -1
- package/dist/dashboard/assets/{mindmap-definition-VGOIOE7T-BVsYbH_c.js → mindmap-definition-VGOIOE7T-hlQXiFXa.js} +1 -1
- package/dist/dashboard/assets/{pieDiagram-ADFJNKIX-BpwMMFZ3.js → pieDiagram-ADFJNKIX-CutZB3jG.js} +1 -1
- package/dist/dashboard/{dist/assets/quadrantDiagram-AYHSOK5B-C6NljtBN.js → assets/quadrantDiagram-AYHSOK5B-Bv6m-3mt.js} +1 -1
- package/dist/dashboard/{dist/assets/requirementDiagram-UZGBJVZJ-B3VaAf8y.js → assets/requirementDiagram-UZGBJVZJ-BQkld-bF.js} +1 -1
- package/dist/dashboard/{dist/assets/sankeyDiagram-TZEHDZUN-2ZhiU1NT.js → assets/sankeyDiagram-TZEHDZUN-DCWiCVGp.js} +1 -1
- package/dist/dashboard/assets/{sequenceDiagram-WL72ISMW-nMYJrjDT.js → sequenceDiagram-WL72ISMW-Dq_0SNSh.js} +1 -1
- package/dist/dashboard/{dist/assets/stateDiagram-FKZM4ZOC-0Wd-KmOv.js → assets/stateDiagram-FKZM4ZOC-BAd-cwxt.js} +1 -1
- package/dist/dashboard/assets/stateDiagram-v2-4FDKWEC3-DXlj7mrF.js +1 -0
- package/dist/dashboard/{dist/assets/timeline-definition-IT6M3QCI-CAmQOjBu.js → assets/timeline-definition-IT6M3QCI-BlMKo2bz.js} +1 -1
- package/dist/dashboard/{dist/assets/treemap-GDKQZRPO-CRP-WvE-.js → assets/treemap-GDKQZRPO-Cn6SBC6j.js} +1 -1
- package/dist/dashboard/{dist/assets/xychartDiagram-PRI3JC2R-5DoR2_q5.js → assets/xychartDiagram-PRI3JC2R-DlBeMjr8.js} +1 -1
- package/dist/dashboard/dist/assets/{_basePickBy-C2jmWITn.js → _basePickBy-BKGHUeDJ.js} +1 -1
- package/dist/dashboard/{assets/_baseUniq-BZHS9wTU.js → dist/assets/_baseUniq-CtA-DQF7.js} +1 -1
- package/dist/dashboard/dist/assets/{arc-B-Q4nGPT.js → arc-CbXP3Mc9.js} +1 -1
- package/dist/dashboard/dist/assets/{architectureDiagram-VXUJARFQ-Bs48s9rH.js → architectureDiagram-VXUJARFQ-n7QxasMM.js} +1 -1
- package/dist/dashboard/dist/assets/{blockDiagram-VD42YOAC-BPw-T2eL.js → blockDiagram-VD42YOAC-MXnGwKRn.js} +1 -1
- package/dist/dashboard/{assets/c4Diagram-YG6GDRKO-DuP3tG_c.js → dist/assets/c4Diagram-YG6GDRKO-B3yZ5P9k.js} +1 -1
- package/dist/dashboard/dist/assets/channel-C7QwX7U8.js +1 -0
- package/dist/dashboard/dist/assets/{chunk-4BX2VUAB-B9cIE1K2.js → chunk-4BX2VUAB-Dw3El5KF.js} +1 -1
- package/dist/dashboard/dist/assets/{chunk-55IACEB6-BIFhHB94.js → chunk-55IACEB6-T8Jf00IL.js} +1 -1
- package/dist/dashboard/dist/assets/{chunk-B4BG7PRW-B3IrqteW.js → chunk-B4BG7PRW-DAJalKYJ.js} +1 -1
- package/dist/dashboard/dist/assets/{chunk-DI55MBZ5-B7xHuqZu.js → chunk-DI55MBZ5-p7o_KuDF.js} +1 -1
- package/dist/dashboard/dist/assets/{chunk-FMBD7UC4-BBMfQbw1.js → chunk-FMBD7UC4-B0wUAfQR.js} +1 -1
- package/dist/dashboard/dist/assets/{chunk-QN33PNHL-BBQ6Q-9S.js → chunk-QN33PNHL-BTFwTEw8.js} +1 -1
- package/dist/dashboard/dist/assets/{chunk-QZHKN3VN-9uXt-06K.js → chunk-QZHKN3VN-CNXHnjkC.js} +1 -1
- package/dist/dashboard/dist/assets/{chunk-TZMSLE5B-BjDMUc_L.js → chunk-TZMSLE5B-BIVywBYp.js} +1 -1
- package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-Dkb-G0UK.js +1 -0
- package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-Dkb-G0UK.js +1 -0
- package/dist/dashboard/dist/assets/clone-BSdXhKmH.js +1 -0
- package/dist/dashboard/dist/assets/{cose-bilkent-S5V4N54A-DLYZ4dZA.js → cose-bilkent-S5V4N54A-DuALhY5a.js} +1 -1
- package/dist/dashboard/dist/assets/{dagre-6UL2VRFP-B8oEROJc.js → dagre-6UL2VRFP-w6endfy9.js} +1 -1
- package/dist/dashboard/dist/assets/{diagram-PSM6KHXK-5uki9Dw8.js → diagram-PSM6KHXK-BDnUwPQC.js} +1 -1
- package/dist/dashboard/dist/assets/{diagram-QEK2KX5R-BRNhmby2.js → diagram-QEK2KX5R-Cbb7ctAo.js} +1 -1
- package/dist/dashboard/{assets/diagram-S2PKOQOG-Bk_jyoxg.js → dist/assets/diagram-S2PKOQOG-76ascveh.js} +1 -1
- package/dist/dashboard/dist/assets/{erDiagram-Q2GNP2WA-BbPQp6RA.js → erDiagram-Q2GNP2WA-BQQnVF0J.js} +1 -1
- package/dist/dashboard/dist/assets/{flowDiagram-NV44I4VS-BAHshMEg.js → flowDiagram-NV44I4VS-dKukiSxD.js} +1 -1
- package/dist/dashboard/dist/assets/{ganttDiagram-JELNMOA3-BS4JnN-M.js → ganttDiagram-JELNMOA3-BqnazZuZ.js} +1 -1
- package/dist/dashboard/{assets/gitGraphDiagram-V2S2FVAM-RgQMxxaQ.js → dist/assets/gitGraphDiagram-V2S2FVAM-BUFcnXCj.js} +1 -1
- package/dist/dashboard/dist/assets/{graph-CD7-npU0.js → graph-CGQIvL3r.js} +1 -1
- package/dist/dashboard/dist/assets/index-CadOHtae.css +1 -0
- package/dist/dashboard/dist/assets/{index-D3_88Gr5.js → index-DwqfA4mc.js} +115 -115
- package/dist/dashboard/dist/assets/{infoDiagram-HS3SLOUP-BMp4C5wf.js → infoDiagram-HS3SLOUP-BdylFPLI.js} +1 -1
- package/dist/dashboard/{assets/journeyDiagram-XKPGCS4Q-CdvZAxeA.js → dist/assets/journeyDiagram-XKPGCS4Q-BzJTBkhp.js} +1 -1
- package/dist/dashboard/{assets/kanban-definition-3W4ZIXB7-DTse5xX8.js → dist/assets/kanban-definition-3W4ZIXB7-StKomgio.js} +1 -1
- package/dist/dashboard/dist/assets/{layout-6njVG9Ld.js → layout-BnsX73QS.js} +1 -1
- package/dist/dashboard/dist/assets/{mindmap-definition-VGOIOE7T-B7wYeLe1.js → mindmap-definition-VGOIOE7T-HqFRhVFX.js} +1 -1
- package/dist/dashboard/dist/assets/{pieDiagram-ADFJNKIX-5pSPRGJ2.js → pieDiagram-ADFJNKIX-2I2tFH0C.js} +1 -1
- package/dist/dashboard/{assets/quadrantDiagram-AYHSOK5B-C6NljtBN.js → dist/assets/quadrantDiagram-AYHSOK5B-PlELkdBW.js} +1 -1
- package/dist/dashboard/{assets/requirementDiagram-UZGBJVZJ-Ban4o6oK.js → dist/assets/requirementDiagram-UZGBJVZJ-_9eLQNcZ.js} +1 -1
- package/dist/dashboard/dist/assets/{sankeyDiagram-TZEHDZUN-BDImwZtB.js → sankeyDiagram-TZEHDZUN-DHl1Ss7O.js} +1 -1
- package/dist/dashboard/dist/assets/{sequenceDiagram-WL72ISMW-1d8_kyI3.js → sequenceDiagram-WL72ISMW-B9p0m3Uf.js} +1 -1
- package/dist/dashboard/dist/assets/{stateDiagram-FKZM4ZOC-BWqoDymf.js → stateDiagram-FKZM4ZOC--rpDODjT.js} +1 -1
- package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-Ca9uGk46.js +1 -0
- package/dist/dashboard/dist/assets/{timeline-definition-IT6M3QCI-CBR9kqeJ.js → timeline-definition-IT6M3QCI-BCHaGBHB.js} +1 -1
- package/dist/dashboard/{assets/treemap-GDKQZRPO-D-XpcCUD.js → dist/assets/treemap-GDKQZRPO-CgiqDY8M.js} +1 -1
- package/dist/dashboard/dist/assets/{xychartDiagram-PRI3JC2R-7aSkQtVu.js → xychartDiagram-PRI3JC2R-BMvBBbeV.js} +1 -1
- package/dist/dashboard/dist/index.html +2 -2
- package/dist/dashboard/dist/reports/coverage-summary.json +848 -616
- package/dist/dashboard/index.html +2 -2
- package/dist/src/config/defaultConfig.d.ts.map +1 -1
- package/dist/src/config/defaultConfig.js +0 -37
- package/dist/src/config/types.d.ts +0 -42
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/config/validateConfig.d.ts.map +1 -1
- package/dist/src/config/validateConfig.js +0 -3
- package/dist/src/discovery/fileClassifier.d.ts.map +1 -1
- package/dist/src/discovery/fileClassifier.js +16 -15
- package/dist/src/discovery/projectDiscovery.d.ts.map +1 -1
- package/dist/src/discovery/projectDiscovery.js +1 -4
- package/dist/src/generation/context-builder.d.ts +3 -13
- package/dist/src/generation/context-builder.d.ts.map +1 -1
- package/dist/src/generation/context-builder.js +151 -119
- package/dist/src/generation/engine.d.ts +34 -13
- package/dist/src/generation/engine.d.ts.map +1 -1
- package/dist/src/generation/engine.js +317 -143
- package/dist/src/generation/file-router.d.ts +4 -5
- package/dist/src/generation/file-router.d.ts.map +1 -1
- package/dist/src/generation/file-router.js +39 -58
- package/dist/src/generation/gap-extractor.d.ts +9 -4
- package/dist/src/generation/gap-extractor.d.ts.map +1 -1
- package/dist/src/generation/gap-extractor.js +230 -240
- package/dist/src/generation/template-renderer.d.ts +9 -11
- package/dist/src/generation/template-renderer.d.ts.map +1 -1
- package/dist/src/generation/template-renderer.js +499 -519
- package/dist/src/generation/types.d.ts +48 -244
- package/dist/src/generation/types.d.ts.map +1 -1
- package/dist/src/generation/types.js +0 -4
- package/dist/src/index.js +247 -254
- package/dist/src/inference/businessRuleInference.d.ts.map +1 -1
- package/dist/src/inference/businessRuleInference.js +0 -95
- package/dist/src/inference/integrationFlowInference.d.ts +1 -11
- package/dist/src/inference/integrationFlowInference.d.ts.map +1 -1
- package/dist/src/inference/integrationFlowInference.js +2 -49
- package/dist/src/inference/routeInference.d.ts.map +1 -1
- package/dist/src/inference/routeInference.js +8 -54
- package/dist/src/languages/java/semanticBuilder.d.ts.map +1 -1
- package/dist/src/languages/java/semanticBuilder.js +12 -69
- package/dist/src/languages/javascript/angularDetector.d.ts.map +1 -1
- package/dist/src/languages/javascript/angularDetector.js +17 -50
- package/dist/src/languages/javascript/assertionResolver.js +4 -6
- package/dist/src/languages/javascript/hapiDetector.d.ts.map +1 -1
- package/dist/src/languages/javascript/hapiDetector.js +5 -48
- package/dist/src/languages/javascript/vueDetector.d.ts +0 -2
- package/dist/src/languages/javascript/vueDetector.d.ts.map +1 -1
- package/dist/src/languages/javascript/vueDetector.js +0 -22
- package/dist/src/languages/python/index.d.ts +1 -1
- package/dist/src/languages/python/index.d.ts.map +1 -1
- package/dist/src/languages/python/index.js +3 -33
- package/dist/src/pipeline/confidence.d.ts +1 -6
- package/dist/src/pipeline/confidence.d.ts.map +1 -1
- package/dist/src/pipeline/confidence.js +3 -8
- package/dist/src/pipeline/detectors/expressMiddlewareDetector.d.ts +21 -0
- package/dist/src/pipeline/detectors/expressMiddlewareDetector.d.ts.map +1 -0
- package/dist/src/pipeline/detectors/expressMiddlewareDetector.js +201 -0
- package/dist/src/pipeline/detectors/flaskBlueprintDetector.d.ts +23 -0
- package/dist/src/pipeline/detectors/flaskBlueprintDetector.d.ts.map +1 -0
- package/dist/src/pipeline/detectors/flaskBlueprintDetector.js +263 -0
- package/dist/src/pipeline/detectors/springDddDetector.d.ts +23 -0
- package/dist/src/pipeline/detectors/springDddDetector.d.ts.map +1 -0
- package/dist/src/pipeline/detectors/springDddDetector.js +237 -0
- package/dist/src/pipeline/detectors/types.d.ts +97 -0
- package/dist/src/pipeline/detectors/types.d.ts.map +1 -0
- package/dist/src/pipeline/detectors/types.js +15 -0
- package/dist/src/pipeline/graph.d.ts.map +1 -1
- package/dist/src/pipeline/graph.js +4 -16
- package/dist/src/pipeline/stages/ast/astStage.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/astStage.js +2 -46
- package/dist/src/pipeline/stages/ast/baseUrlComposer.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/baseUrlComposer.js +4 -18
- package/dist/src/pipeline/stages/ast/crossFileResolver.js +0 -29
- package/dist/src/pipeline/stages/ast/graphBuilder.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/graphBuilder.js +0 -81
- package/dist/src/pipeline/stages/ast/optionalAuthUnifier.d.ts +1 -3
- package/dist/src/pipeline/stages/ast/optionalAuthUnifier.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/optionalAuthUnifier.js +14 -34
- package/dist/src/pipeline/stages/ast/resolvers/angularInjectionResolver.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/resolvers/angularInjectionResolver.js +3 -22
- package/dist/src/pipeline/stages/ast/resolvers/dddLayerResolver.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/resolvers/dddLayerResolver.js +28 -104
- package/dist/src/pipeline/stages/ast/resolvers/mybatisResolver.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/resolvers/mybatisResolver.js +0 -56
- package/dist/src/pipeline/stages/ast/resolvers/vuexActionResolver.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/resolvers/vuexActionResolver.js +18 -43
- package/dist/src/pipeline/stages/ast/rulesEnforcer.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/rulesEnforcer.js +45 -336
- package/dist/src/pipeline/stages/merge/conflictDetector.d.ts +0 -2
- package/dist/src/pipeline/stages/merge/conflictDetector.d.ts.map +1 -1
- package/dist/src/pipeline/stages/merge/conflictDetector.js +2 -54
- package/dist/src/pipeline/stages/merge/coverageMappingBuilder.d.ts.map +1 -1
- package/dist/src/pipeline/stages/merge/coverageMappingBuilder.js +3 -67
- package/dist/src/pipeline/stages/tia/mockBoundaryDetector.d.ts.map +1 -1
- package/dist/src/pipeline/stages/tia/mockBoundaryDetector.js +1 -8
- package/dist/src/pipeline/stages/tia/parameterizedTestExpander.js +4 -8
- package/dist/src/pipeline/stages/tia/testLayerClassifier.d.ts.map +1 -1
- package/dist/src/pipeline/stages/tia/testLayerClassifier.js +10 -36
- package/dist/src/pipeline/types.d.ts +1 -1
- package/dist/src/pipeline/types.d.ts.map +1 -1
- package/dist/src/reporting.d.ts.map +1 -1
- package/dist/src/reporting.js +2 -1
- package/dist/src/streaming/detectors/eventBridgeDetector.d.ts +5 -0
- package/dist/src/streaming/detectors/eventBridgeDetector.d.ts.map +1 -0
- package/dist/src/streaming/detectors/eventBridgeDetector.js +82 -0
- package/dist/src/streaming/detectors/kafkaDetector.d.ts +5 -0
- package/dist/src/streaming/detectors/kafkaDetector.d.ts.map +1 -0
- package/dist/src/streaming/detectors/kafkaDetector.js +97 -0
- package/dist/src/streaming/detectors/natsDetector.d.ts +5 -0
- package/dist/src/streaming/detectors/natsDetector.d.ts.map +1 -0
- package/dist/src/streaming/detectors/natsDetector.js +96 -0
- package/dist/src/streaming/detectors/pubsubDetector.d.ts +5 -0
- package/dist/src/streaming/detectors/pubsubDetector.d.ts.map +1 -0
- package/dist/src/streaming/detectors/pubsubDetector.js +82 -0
- package/dist/src/streaming/detectors/rabbitmqDetector.d.ts +5 -0
- package/dist/src/streaming/detectors/rabbitmqDetector.d.ts.map +1 -0
- package/dist/src/streaming/detectors/rabbitmqDetector.js +103 -0
- package/dist/src/streaming/detectors/redisPubsubDetector.d.ts +5 -0
- package/dist/src/streaming/detectors/redisPubsubDetector.d.ts.map +1 -0
- package/dist/src/streaming/detectors/redisPubsubDetector.js +81 -0
- package/dist/src/streaming/detectors/snsDetector.d.ts +5 -0
- package/dist/src/streaming/detectors/snsDetector.d.ts.map +1 -0
- package/dist/src/streaming/detectors/snsDetector.js +81 -0
- package/dist/src/streaming/detectors/sqsDetector.d.ts +5 -0
- package/dist/src/streaming/detectors/sqsDetector.d.ts.map +1 -0
- package/dist/src/streaming/detectors/sqsDetector.js +81 -0
- package/dist/src/streaming/eventCoverage.d.ts +46 -0
- package/dist/src/streaming/eventCoverage.d.ts.map +1 -0
- package/dist/src/streaming/eventCoverage.js +270 -0
- package/dist/src/streaming/types.d.ts +34 -0
- package/dist/src/streaming/types.d.ts.map +1 -0
- package/dist/src/streaming/types.js +2 -0
- package/dist/src/summary/markdownRenderer.d.ts.map +1 -1
- package/dist/src/summary/markdownRenderer.js +1 -0
- package/dist/src/summary/summaryTypes.d.ts.map +1 -1
- package/dist/src/summary/summaryTypes.js +1 -0
- package/package.json +3 -3
- package/dist/dashboard/assets/arc-D4xT0thw.js +0 -1
- package/dist/dashboard/assets/architectureDiagram-VXUJARFQ-Bs48s9rH.js +0 -36
- package/dist/dashboard/assets/channel-YFEOkJua.js +0 -1
- package/dist/dashboard/assets/chunk-B4BG7PRW-D5WlZonc.js +0 -165
- package/dist/dashboard/assets/chunk-DI55MBZ5-B-xsiGYI.js +0 -220
- package/dist/dashboard/assets/classDiagram-2ON5EDUG-CE9rmEXI.js +0 -1
- package/dist/dashboard/assets/classDiagram-v2-WZHVMYZB-CE9rmEXI.js +0 -1
- package/dist/dashboard/assets/clone-BAVNftx6.js +0 -1
- package/dist/dashboard/assets/cose-bilkent-S5V4N54A-DrNDePwE.js +0 -1
- package/dist/dashboard/assets/erDiagram-Q2GNP2WA-BbPQp6RA.js +0 -60
- package/dist/dashboard/assets/flowDiagram-NV44I4VS-1j044bLK.js +0 -162
- package/dist/dashboard/assets/index-Bt72YjAZ.css +0 -1
- package/dist/dashboard/assets/index-DuT2LnIf.js +0 -523
- package/dist/dashboard/assets/layout-CnKzeCpQ.js +0 -1
- package/dist/dashboard/assets/sankeyDiagram-TZEHDZUN-BDImwZtB.js +0 -10
- package/dist/dashboard/assets/stateDiagram-FKZM4ZOC-DkBAMCJV.js +0 -1
- package/dist/dashboard/assets/stateDiagram-v2-4FDKWEC3-CtkfyoSn.js +0 -1
- package/dist/dashboard/assets/timeline-definition-IT6M3QCI-CGUDCWFx.js +0 -61
- package/dist/dashboard/assets/xychartDiagram-PRI3JC2R-BlIpbwyn.js +0 -7
- package/dist/dashboard/dist/assets/_basePickBy-CErN2e4K.js +0 -1
- package/dist/dashboard/dist/assets/_basePickBy-CYB1KXah.js +0 -1
- package/dist/dashboard/dist/assets/_basePickBy-D4ml7gdd.js +0 -1
- package/dist/dashboard/dist/assets/_basePickBy-D7SXdoHL.js +0 -1
- package/dist/dashboard/dist/assets/_basePickBy-DUQHbXda.js +0 -1
- package/dist/dashboard/dist/assets/_basePickBy-DZR484hj.js +0 -1
- package/dist/dashboard/dist/assets/_basePickBy-_zJIZmFM.js +0 -1
- package/dist/dashboard/dist/assets/_baseUniq-BZHS9wTU.js +0 -1
- package/dist/dashboard/dist/assets/_baseUniq-BzwtoVZI.js +0 -1
- package/dist/dashboard/dist/assets/_baseUniq-C2oBAxY3.js +0 -1
- package/dist/dashboard/dist/assets/_baseUniq-CUKBQ2bc.js +0 -1
- package/dist/dashboard/dist/assets/_baseUniq-Ct8XEXnH.js +0 -1
- package/dist/dashboard/dist/assets/_baseUniq-DE6cyzJb.js +0 -1
- package/dist/dashboard/dist/assets/_baseUniq-DzHorfx6.js +0 -1
- package/dist/dashboard/dist/assets/arc-B7p8x22e.js +0 -1
- package/dist/dashboard/dist/assets/arc-BDOeMmjX.js +0 -1
- package/dist/dashboard/dist/assets/arc-BaDRUN_n.js +0 -1
- package/dist/dashboard/dist/assets/arc-CjFGY63A.js +0 -1
- package/dist/dashboard/dist/assets/arc-D4xT0thw.js +0 -1
- package/dist/dashboard/dist/assets/arc-g03p1JXB.js +0 -1
- package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-BUdFGrlT.js +0 -36
- package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-CLCqS7Lv.js +0 -36
- package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-C_5dqWCI.js +0 -36
- package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-WnVycqnT.js +0 -36
- package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-mH7lInv5.js +0 -36
- package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-wVr1_uNB.js +0 -36
- package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-BBXc88fn.js +0 -122
- package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-BvkiW8lj.js +0 -122
- package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-CavSRNuP.js +0 -122
- package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-D-TzNNzc.js +0 -122
- package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-DK0YAM7_.js +0 -122
- package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-DbGIO6Kt.js +0 -122
- package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-V4vxrfzX.js +0 -122
- package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-Bs4R4b6P.js +0 -10
- package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-BsgzPfQ3.js +0 -10
- package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-CAFpcejP.js +0 -10
- package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-DVnWnYOL.js +0 -10
- package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-DuP3tG_c.js +0 -10
- package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-ZEVciqTW.js +0 -10
- package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-w18S5AEN.js +0 -10
- package/dist/dashboard/dist/assets/channel-BSnIwwuG.js +0 -1
- package/dist/dashboard/dist/assets/channel-BgeGdqQG.js +0 -1
- package/dist/dashboard/dist/assets/channel-CyXkK5KC.js +0 -1
- package/dist/dashboard/dist/assets/channel-D5Cq9giL.js +0 -1
- package/dist/dashboard/dist/assets/channel-DbeZpf5T.js +0 -1
- package/dist/dashboard/dist/assets/channel-Di9el3wE.js +0 -1
- package/dist/dashboard/dist/assets/channel-YFEOkJua.js +0 -1
- package/dist/dashboard/dist/assets/channel-psxgcQ_j.js +0 -1
- package/dist/dashboard/dist/assets/chunk-4BX2VUAB-BDYDsvGv.js +0 -1
- package/dist/dashboard/dist/assets/chunk-4BX2VUAB-BF8loPLD.js +0 -1
- package/dist/dashboard/dist/assets/chunk-4BX2VUAB-BrU7mtb9.js +0 -1
- package/dist/dashboard/dist/assets/chunk-4BX2VUAB-CSJ8KLGx.js +0 -1
- package/dist/dashboard/dist/assets/chunk-4BX2VUAB-DY1boKsq.js +0 -1
- package/dist/dashboard/dist/assets/chunk-4BX2VUAB-IN53WLTx.js +0 -1
- package/dist/dashboard/dist/assets/chunk-4BX2VUAB-oleArqPu.js +0 -1
- package/dist/dashboard/dist/assets/chunk-55IACEB6-BSL35gyW.js +0 -1
- package/dist/dashboard/dist/assets/chunk-55IACEB6-BzCzmNUn.js +0 -1
- package/dist/dashboard/dist/assets/chunk-55IACEB6-C3HNF-UF.js +0 -1
- package/dist/dashboard/dist/assets/chunk-55IACEB6-CiEoroXY.js +0 -1
- package/dist/dashboard/dist/assets/chunk-55IACEB6-DV6VmXIy.js +0 -1
- package/dist/dashboard/dist/assets/chunk-55IACEB6-DwsmCNp_.js +0 -1
- package/dist/dashboard/dist/assets/chunk-55IACEB6-kJkjQYxk.js +0 -1
- package/dist/dashboard/dist/assets/chunk-B4BG7PRW-BChq1Wly.js +0 -165
- package/dist/dashboard/dist/assets/chunk-B4BG7PRW-BiYJ9gu_.js +0 -165
- package/dist/dashboard/dist/assets/chunk-B4BG7PRW-CCMwwYCe.js +0 -165
- package/dist/dashboard/dist/assets/chunk-B4BG7PRW-D5WlZonc.js +0 -165
- package/dist/dashboard/dist/assets/chunk-B4BG7PRW-eTDXrKrv.js +0 -165
- package/dist/dashboard/dist/assets/chunk-B4BG7PRW-wQ6TCEMq.js +0 -165
- package/dist/dashboard/dist/assets/chunk-DI55MBZ5-BD9C9H7Y.js +0 -220
- package/dist/dashboard/dist/assets/chunk-DI55MBZ5-BTfzxsg4.js +0 -220
- package/dist/dashboard/dist/assets/chunk-DI55MBZ5-CSRqV3_6.js +0 -220
- package/dist/dashboard/dist/assets/chunk-DI55MBZ5-D7eiRvhB.js +0 -220
- package/dist/dashboard/dist/assets/chunk-DI55MBZ5-DfslhtXS.js +0 -220
- package/dist/dashboard/dist/assets/chunk-DI55MBZ5-M-8I3jEy.js +0 -220
- package/dist/dashboard/dist/assets/chunk-FMBD7UC4-BgEzYy_c.js +0 -15
- package/dist/dashboard/dist/assets/chunk-FMBD7UC4-CtTcDWZJ.js +0 -15
- package/dist/dashboard/dist/assets/chunk-FMBD7UC4-CyF99olo.js +0 -15
- package/dist/dashboard/dist/assets/chunk-FMBD7UC4-DRb5NEMr.js +0 -15
- package/dist/dashboard/dist/assets/chunk-FMBD7UC4-K3PC79JF.js +0 -15
- package/dist/dashboard/dist/assets/chunk-FMBD7UC4-V0V2L4Gq.js +0 -15
- package/dist/dashboard/dist/assets/chunk-FMBD7UC4-bSA0XiS0.js +0 -15
- package/dist/dashboard/dist/assets/chunk-QN33PNHL-BNX7uRa_.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QN33PNHL-BRSlHScq.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QN33PNHL-BrOIYUBs.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QN33PNHL-CCuhlE1C.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QN33PNHL-CmeZ1h1Z.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QN33PNHL-DFgUs0T8.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QN33PNHL-JcQZ0Q-Q.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QZHKN3VN-Cix7nLqx.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QZHKN3VN-CliaQGD4.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QZHKN3VN-Cyg7Km90.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QZHKN3VN-DKgOcPif.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QZHKN3VN-MNv3v4He.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QZHKN3VN-T5hoQANf.js +0 -1
- package/dist/dashboard/dist/assets/chunk-QZHKN3VN-mq-zucvn.js +0 -1
- package/dist/dashboard/dist/assets/chunk-TZMSLE5B-BoJFBewj.js +0 -1
- package/dist/dashboard/dist/assets/chunk-TZMSLE5B-BtXpcWN4.js +0 -1
- package/dist/dashboard/dist/assets/chunk-TZMSLE5B-C8KNXDi7.js +0 -1
- package/dist/dashboard/dist/assets/chunk-TZMSLE5B-CyhcxGB1.js +0 -1
- package/dist/dashboard/dist/assets/chunk-TZMSLE5B-DGTVcqTS.js +0 -1
- package/dist/dashboard/dist/assets/chunk-TZMSLE5B-DqMNcR7I.js +0 -1
- package/dist/dashboard/dist/assets/chunk-TZMSLE5B-F1fppg7C.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-AMwn99HP.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-BbkwHRko.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-Be0F7AG8.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-BkGN4Cpz.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-CE9rmEXI.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-CM6Qs-Qs.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-D3VDjeKC.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-o8p5Y0H9.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-AMwn99HP.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-BbkwHRko.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-Be0F7AG8.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-BkGN4Cpz.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-CE9rmEXI.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-CM6Qs-Qs.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-D3VDjeKC.js +0 -1
- package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-o8p5Y0H9.js +0 -1
- package/dist/dashboard/dist/assets/clone-B5PF81Z3.js +0 -1
- package/dist/dashboard/dist/assets/clone-BAVNftx6.js +0 -1
- package/dist/dashboard/dist/assets/clone-BmpQ0ely.js +0 -1
- package/dist/dashboard/dist/assets/clone-CKIuLE_W.js +0 -1
- package/dist/dashboard/dist/assets/clone-Cv0cxIIi.js +0 -1
- package/dist/dashboard/dist/assets/clone-Cvq8JuOb.js +0 -1
- package/dist/dashboard/dist/assets/clone-DEYRVSAn.js +0 -1
- package/dist/dashboard/dist/assets/clone-KEkbvJY9.js +0 -1
- package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-DMGRGhwB.js +0 -1
- package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-DrNDePwE.js +0 -1
- package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-GjySlYac.js +0 -1
- package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-UX3RfzXW.js +0 -1
- package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-YL9kFxCl.js +0 -1
- package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-xVw-THr_.js +0 -1
- package/dist/dashboard/dist/assets/dagre-6UL2VRFP-BO79zHpJ.js +0 -4
- package/dist/dashboard/dist/assets/dagre-6UL2VRFP-Bjadb8g_.js +0 -4
- package/dist/dashboard/dist/assets/dagre-6UL2VRFP-CJT7lofP.js +0 -4
- package/dist/dashboard/dist/assets/dagre-6UL2VRFP-CUx6EwnW.js +0 -4
- package/dist/dashboard/dist/assets/dagre-6UL2VRFP-D03qnh38.js +0 -4
- package/dist/dashboard/dist/assets/dagre-6UL2VRFP-DgEqrxGj.js +0 -4
- package/dist/dashboard/dist/assets/dagre-6UL2VRFP-NZWnQN_Y.js +0 -4
- package/dist/dashboard/dist/assets/diagram-PSM6KHXK-BPFtplp4.js +0 -24
- package/dist/dashboard/dist/assets/diagram-PSM6KHXK-BgOmComt.js +0 -24
- package/dist/dashboard/dist/assets/diagram-PSM6KHXK-DGtyS7lD.js +0 -24
- package/dist/dashboard/dist/assets/diagram-PSM6KHXK-D__FKIzE.js +0 -24
- package/dist/dashboard/dist/assets/diagram-PSM6KHXK-DtE0cTIs.js +0 -24
- package/dist/dashboard/dist/assets/diagram-PSM6KHXK-JEfxbZj6.js +0 -24
- package/dist/dashboard/dist/assets/diagram-PSM6KHXK-Y-M5J_PO.js +0 -24
- package/dist/dashboard/dist/assets/diagram-QEK2KX5R-1hjfopmw.js +0 -43
- package/dist/dashboard/dist/assets/diagram-QEK2KX5R-BHyZd544.js +0 -43
- package/dist/dashboard/dist/assets/diagram-QEK2KX5R-BXMS0hEZ.js +0 -43
- package/dist/dashboard/dist/assets/diagram-QEK2KX5R-BtOA2yYh.js +0 -43
- package/dist/dashboard/dist/assets/diagram-QEK2KX5R-CSCGZUfr.js +0 -43
- package/dist/dashboard/dist/assets/diagram-QEK2KX5R-CYK-aLR5.js +0 -43
- package/dist/dashboard/dist/assets/diagram-QEK2KX5R-CYxueP7U.js +0 -43
- package/dist/dashboard/dist/assets/diagram-S2PKOQOG-Bk_jyoxg.js +0 -24
- package/dist/dashboard/dist/assets/diagram-S2PKOQOG-CRUXUQeh.js +0 -24
- package/dist/dashboard/dist/assets/diagram-S2PKOQOG-CzytkAcm.js +0 -24
- package/dist/dashboard/dist/assets/diagram-S2PKOQOG-D-ku_X8U.js +0 -24
- package/dist/dashboard/dist/assets/diagram-S2PKOQOG-DdqZVGN1.js +0 -24
- package/dist/dashboard/dist/assets/diagram-S2PKOQOG-Gj3ANjIG.js +0 -24
- package/dist/dashboard/dist/assets/diagram-S2PKOQOG-qvXlTDud.js +0 -24
- package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DDk1KpRF.js +0 -60
- package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DGl6gPe2.js +0 -60
- package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DSC5VPcF.js +0 -60
- package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DZpjLrp5.js +0 -60
- package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-Dhb_VQMS.js +0 -60
- package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DvI8ycM6.js +0 -60
- package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-CBnhpWKd.js +0 -162
- package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-CYXUqE3L.js +0 -162
- package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-Co89qYBD.js +0 -162
- package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-DRAD4OG7.js +0 -162
- package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-PVleScVK.js +0 -162
- package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-gKUH-GJ2.js +0 -162
- package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-2r3WpWQC.js +0 -267
- package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-BA65eVi0.js +0 -267
- package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-Cjy_BOl2.js +0 -267
- package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-CsUMU5Ws.js +0 -267
- package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-DK_45K6s.js +0 -267
- package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-DX-lROHt.js +0 -267
- package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-Dm_lLo9y.js +0 -267
- package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-C9NpbucY.js +0 -65
- package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-CWo2OK69.js +0 -65
- package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-DM9AW1aP.js +0 -65
- package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-DYrdM8tK.js +0 -65
- package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-RgQMxxaQ.js +0 -65
- package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-Uz3nRdju.js +0 -65
- package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-bYKe_efj.js +0 -65
- package/dist/dashboard/dist/assets/graph-BP2ns4se.js +0 -1
- package/dist/dashboard/dist/assets/graph-BVGuJ5gs.js +0 -1
- package/dist/dashboard/dist/assets/graph-Clj85F2M.js +0 -1
- package/dist/dashboard/dist/assets/graph-CpRVMcWW.js +0 -1
- package/dist/dashboard/dist/assets/graph-Cwn7jgQS.js +0 -1
- package/dist/dashboard/dist/assets/graph-ZtgwAPQj.js +0 -1
- package/dist/dashboard/dist/assets/graph-gV0gk5Dq.js +0 -1
- package/dist/dashboard/dist/assets/index-Bt72YjAZ.css +0 -1
- package/dist/dashboard/dist/assets/index-ByH_nEhG.js +0 -523
- package/dist/dashboard/dist/assets/index-C302ingQ.css +0 -1
- package/dist/dashboard/dist/assets/index-CqEIqNus.js +0 -781
- package/dist/dashboard/dist/assets/index-D-AtVpd2.js +0 -523
- package/dist/dashboard/dist/assets/index-DEXwnExZ.js +0 -523
- package/dist/dashboard/dist/assets/index-DbUdNJca.js +0 -781
- package/dist/dashboard/dist/assets/index-DuT2LnIf.js +0 -523
- package/dist/dashboard/dist/assets/index-xecKLQ58.css +0 -1
- package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-BjChBCME.js +0 -2
- package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-BxoN3QPh.js +0 -2
- package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-CxmZGT-4.js +0 -2
- package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-D3SFXNAS.js +0 -2
- package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-DyT5Fs8R.js +0 -2
- package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-HLwGZBHJ.js +0 -2
- package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-ujnMqVz3.js +0 -2
- package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-BC0GSZ7W.js +0 -139
- package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-Bv1IeJ8A.js +0 -139
- package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-CFgbI9OH.js +0 -139
- package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-CdvZAxeA.js +0 -139
- package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-CiMM9buE.js +0 -139
- package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-DQzfeBIo.js +0 -139
- package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-nYZBlgTD.js +0 -139
- package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-AkiB-BRk.js +0 -89
- package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-BjYw_9v5.js +0 -89
- package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-COTfX74l.js +0 -89
- package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-D3u5Ov-5.js +0 -89
- package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-D6aRd_q1.js +0 -89
- package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-DTse5xX8.js +0 -89
- package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-ueIaoeks.js +0 -89
- package/dist/dashboard/dist/assets/layout-B1fTYUMj.js +0 -1
- package/dist/dashboard/dist/assets/layout-BbJNDkTr.js +0 -1
- package/dist/dashboard/dist/assets/layout-BwmMaJCx.js +0 -1
- package/dist/dashboard/dist/assets/layout-CnKzeCpQ.js +0 -1
- package/dist/dashboard/dist/assets/layout-DgtRACDS.js +0 -1
- package/dist/dashboard/dist/assets/layout-JbkTCGhr.js +0 -1
- package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-B93XW27v.js +0 -68
- package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-BJ5xCmsL.js +0 -68
- package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-BVsYbH_c.js +0 -68
- package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-CkyYtMaD.js +0 -68
- package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-CmcASbkx.js +0 -68
- package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-D001Ygrx.js +0 -68
- package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-QDZ_z8OE.js +0 -68
- package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-9G1tEuaq.js +0 -30
- package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-BIOVbZG_.js +0 -30
- package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-Bf8vKEOf.js +0 -30
- package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-BpwMMFZ3.js +0 -30
- package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-DOXOzepj.js +0 -30
- package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-EeNihpUP.js +0 -30
- package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-uWFQFMEe.js +0 -30
- package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-Bwppivuy.js +0 -7
- package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-CM8qiFLR.js +0 -7
- package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-Crgu5WqK.js +0 -7
- package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-CtbMtM_F.js +0 -7
- package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-i3-JTN3e.js +0 -7
- package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-jDtdB4Ws.js +0 -7
- package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-o21Z8BWo.js +0 -7
- package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-Ban4o6oK.js +0 -64
- package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-BfAcJrqc.js +0 -64
- package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-CgXxZ2rH.js +0 -64
- package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-ClNSNeYe.js +0 -64
- package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-DPTtP4Ve.js +0 -64
- package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-Dw260IiT.js +0 -64
- package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-WIJ0qiJG.js +0 -64
- package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-BFNTuDV7.js +0 -10
- package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-Cb4WB9UB.js +0 -10
- package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-D2OGoxU5.js +0 -10
- package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-DEVTdH0h.js +0 -10
- package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-LR8T4Hv0.js +0 -10
- package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-VcdyPlVE.js +0 -10
- package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-97qjzqIO.js +0 -145
- package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-Bjr5wgXg.js +0 -145
- package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-BqGJWVUS.js +0 -145
- package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-C5h60fvZ.js +0 -145
- package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-DBqchhlr.js +0 -145
- package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-DOr6An-q.js +0 -145
- package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-nMYJrjDT.js +0 -145
- package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-Bl16d4W5.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-C1KYr7Wj.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DDrhZYly.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DKkWVu_K.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DkBAMCJV.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DlLDy54e.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-B05ygO34.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-B0euQu1p.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-BlwaoFEG.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-CtkfyoSn.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-DRV_IYr6.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-Im6pH8C-.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-K_qkvHaB.js +0 -1
- package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-pZ_Rrx6C.js +0 -1
- package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-CGUDCWFx.js +0 -61
- package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-CLdinkid.js +0 -61
- package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-CsRS0WGC.js +0 -61
- package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-D6JNee_P.js +0 -61
- package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-DAT3r9va.js +0 -61
- package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-DR6HNny6.js +0 -61
- package/dist/dashboard/dist/assets/treemap-GDKQZRPO-BlA8rg0m.js +0 -162
- package/dist/dashboard/dist/assets/treemap-GDKQZRPO-CBle3d0d.js +0 -162
- package/dist/dashboard/dist/assets/treemap-GDKQZRPO-CCvvSJBX.js +0 -162
- package/dist/dashboard/dist/assets/treemap-GDKQZRPO-Cw9mkiYN.js +0 -162
- package/dist/dashboard/dist/assets/treemap-GDKQZRPO-D-XpcCUD.js +0 -162
- package/dist/dashboard/dist/assets/treemap-GDKQZRPO-MpQr6tee.js +0 -162
- package/dist/dashboard/dist/assets/treemap-GDKQZRPO-vW7FSd7C.js +0 -162
- package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-B72UwDAP.js +0 -7
- package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-BceejIon.js +0 -7
- package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-BlIpbwyn.js +0 -7
- package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-ByLRWyI2.js +0 -7
- package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-DjyK-sw-.js +0 -7
- package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-bS40I4IT.js +0 -7
- package/dist/dashboard/reports/coverage-summary.json +0 -763
- package/dist/src/generation/ai-flow-exporter.d.ts +0 -7
- package/dist/src/generation/ai-flow-exporter.d.ts.map +0 -1
- package/dist/src/generation/ai-flow-exporter.js +0 -260
- package/dist/src/generation/index.d.ts +0 -9
- package/dist/src/generation/index.d.ts.map +0 -1
- package/dist/src/generation/index.js +0 -15
- package/dist/src/generation/quality-scorer.d.ts +0 -15
- package/dist/src/generation/quality-scorer.d.ts.map +0 -1
- package/dist/src/generation/quality-scorer.js +0 -273
- /package/dist/dashboard/{dist/assets → assets}/index-D_begBP0.css +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Feature 28 — AiFlowExporter
|
|
3
|
-
* Produces ai-ready-flows.md and ai-ready-flows.json for AI coding assistants.
|
|
4
|
-
*/
|
|
5
|
-
import type { AiReadyFlows, AiFlowExporterOptions } from './types';
|
|
6
|
-
export declare function exportAiFlows(opts: AiFlowExporterOptions): Promise<AiReadyFlows>;
|
|
7
|
-
//# sourceMappingURL=ai-flow-exporter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-flow-exporter.d.ts","sourceRoot":"","sources":["../../../src/generation/ai-flow-exporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EACV,YAAY,EAEZ,qBAAqB,EAGtB,MAAM,SAAS,CAAC;AAyJjB,wBAAsB,aAAa,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CAsGtF"}
|
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Feature 28 — AiFlowExporter
|
|
4
|
-
* Produces ai-ready-flows.md and ai-ready-flows.json for AI coding assistants.
|
|
5
|
-
*/
|
|
6
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
-
if (k2 === undefined) k2 = k;
|
|
8
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
-
}
|
|
12
|
-
Object.defineProperty(o, k2, desc);
|
|
13
|
-
}) : (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
o[k2] = m[k];
|
|
16
|
-
}));
|
|
17
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
-
}) : function(o, v) {
|
|
20
|
-
o["default"] = v;
|
|
21
|
-
});
|
|
22
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
-
var ownKeys = function(o) {
|
|
24
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
-
var ar = [];
|
|
26
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
-
return ar;
|
|
28
|
-
};
|
|
29
|
-
return ownKeys(o);
|
|
30
|
-
};
|
|
31
|
-
return function (mod) {
|
|
32
|
-
if (mod && mod.__esModule) return mod;
|
|
33
|
-
var result = {};
|
|
34
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
-
__setModuleDefault(result, mod);
|
|
36
|
-
return result;
|
|
37
|
-
};
|
|
38
|
-
})();
|
|
39
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.exportAiFlows = exportAiFlows;
|
|
41
|
-
const fs = __importStar(require("fs"));
|
|
42
|
-
const path = __importStar(require("path"));
|
|
43
|
-
const gap_extractor_1 = require("./gap-extractor");
|
|
44
|
-
const context_builder_1 = require("./context-builder");
|
|
45
|
-
const template_renderer_1 = require("./template-renderer");
|
|
46
|
-
const file_router_1 = require("./file-router");
|
|
47
|
-
// ─── Priority filter ──────────────────────────────────────────────────────────
|
|
48
|
-
const PRIORITY_VALUES = {
|
|
49
|
-
P0: 0, P1: 1, P2: 2, P3: 3, P4: 4, P5: 5,
|
|
50
|
-
};
|
|
51
|
-
function priorityGte(a, b) {
|
|
52
|
-
return PRIORITY_VALUES[a] <= PRIORITY_VALUES[b];
|
|
53
|
-
}
|
|
54
|
-
// ─── Copilot prompt builder ───────────────────────────────────────────────────
|
|
55
|
-
function buildCopilotPrompt(gap, projectName, testFramework, appImportPath) {
|
|
56
|
-
var _a;
|
|
57
|
-
const lines = [
|
|
58
|
-
`Generate a ${testFramework} test file at \`${gap.suggestedOutputPath}\` for ${gap.endpoint.method} ${gap.endpoint.path}.`,
|
|
59
|
-
`Import the app: \`import { app } from '${appImportPath}'\`.`,
|
|
60
|
-
`Test cases to cover:`,
|
|
61
|
-
];
|
|
62
|
-
for (const tc of gap.missingTestCases) {
|
|
63
|
-
lines.push(`- ${tc.description} (expect HTTP ${tc.expectedStatus})`);
|
|
64
|
-
}
|
|
65
|
-
if (gap.endpoint.auth.required) {
|
|
66
|
-
lines.push(`Auth: Required (${(_a = gap.endpoint.auth.scheme) !== null && _a !== void 0 ? _a : 'Bearer'} token). Use POST /api/users/login to get a token.`);
|
|
67
|
-
}
|
|
68
|
-
if (gap.existingSimilarTests.length > 0) {
|
|
69
|
-
lines.push(`Follow the pattern in \`${gap.existingSimilarTests[0]}\` for style guidance.`);
|
|
70
|
-
}
|
|
71
|
-
lines.push(`Rules: assert status code BEFORE body; no toBeTruthy(); use specific matchers.`);
|
|
72
|
-
const prompt = lines.join(' ');
|
|
73
|
-
// Truncate to ~800 tokens (~3200 chars as rough estimate)
|
|
74
|
-
return prompt.length > 3200 ? prompt.slice(0, 3197) + '...' : prompt;
|
|
75
|
-
}
|
|
76
|
-
// ─── Missing test case builder ────────────────────────────────────────────────
|
|
77
|
-
function buildMissingTestCases(gap) {
|
|
78
|
-
var _a, _b, _c, _d, _e, _f;
|
|
79
|
-
const cases = [];
|
|
80
|
-
const successStatus = (_c = (_b = (_a = gap.responses) === null || _a === void 0 ? void 0 : _a.find(r => r.statusCode >= 200 && r.statusCode < 300)) === null || _b === void 0 ? void 0 : _b.statusCode) !== null && _c !== void 0 ? _c : 200;
|
|
81
|
-
cases.push({ id: 'happy-path', description: 'valid request succeeds', expectedStatus: successStatus });
|
|
82
|
-
if (gap.endpoint.auth.required) {
|
|
83
|
-
cases.push({ id: 'no-auth', description: 'missing auth token', expectedStatus: 401 });
|
|
84
|
-
cases.push({ id: 'invalid-auth', description: 'invalid token', expectedStatus: 401 });
|
|
85
|
-
}
|
|
86
|
-
if (gap.endpoint.auth.optional) {
|
|
87
|
-
cases.push({ id: 'no-auth-optional', description: 'request without auth (optional)', expectedStatus: successStatus });
|
|
88
|
-
}
|
|
89
|
-
const errorResponses = (_e = (_d = gap.responses) === null || _d === void 0 ? void 0 : _d.filter(r => r.statusCode >= 400)) !== null && _e !== void 0 ? _e : [];
|
|
90
|
-
for (const resp of errorResponses.slice(0, 3)) {
|
|
91
|
-
cases.push({
|
|
92
|
-
id: `error-${resp.statusCode}`,
|
|
93
|
-
description: (_f = resp.description) !== null && _f !== void 0 ? _f : `error ${resp.statusCode}`,
|
|
94
|
-
expectedStatus: resp.statusCode,
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
return cases;
|
|
98
|
-
}
|
|
99
|
-
// ─── Markdown generator ───────────────────────────────────────────────────────
|
|
100
|
-
function buildMarkdown(flows) {
|
|
101
|
-
var _a, _b;
|
|
102
|
-
const lines = [
|
|
103
|
-
`# AI-Ready Test Generation Context`,
|
|
104
|
-
`> Generated by api-test-coverage-analyzer | Project: ${flows.project.name} | Analyzed: ${flows.generatedAt.split('T')[0]}`,
|
|
105
|
-
``,
|
|
106
|
-
`## How to Use This Document`,
|
|
107
|
-
`This document contains structured context for an AI assistant to generate missing tests.`,
|
|
108
|
-
`For each gap section below, instruct your AI: "Generate tests for this gap using the context provided."`,
|
|
109
|
-
``,
|
|
110
|
-
`---`,
|
|
111
|
-
``,
|
|
112
|
-
];
|
|
113
|
-
for (let i = 0; i < flows.gaps.length; i++) {
|
|
114
|
-
const gap = flows.gaps[i];
|
|
115
|
-
lines.push(`## Gap ${i + 1}: ${gap.endpoint.method} ${gap.endpoint.path} — [PRIORITY: ${gap.priority} | RISK: ${gap.riskScore}]`);
|
|
116
|
-
lines.push(``);
|
|
117
|
-
lines.push(`### What Needs Testing`);
|
|
118
|
-
lines.push(`Endpoint \`${gap.endpoint.method} ${gap.endpoint.path}\` is missing test coverage. Tests needed for:`);
|
|
119
|
-
for (const tc of gap.missingTestCases) {
|
|
120
|
-
lines.push(`- ${tc.description} (expect ${tc.expectedStatus})`);
|
|
121
|
-
}
|
|
122
|
-
lines.push(``);
|
|
123
|
-
lines.push(`### Endpoint Contract`);
|
|
124
|
-
lines.push(`- **Method:** ${gap.endpoint.method}`);
|
|
125
|
-
lines.push(`- **Path:** \`${gap.endpoint.path}\``);
|
|
126
|
-
if (gap.endpoint.auth.required) {
|
|
127
|
-
lines.push(`- **Auth:** Required (${(_a = gap.endpoint.auth.type) !== null && _a !== void 0 ? _a : 'JWT'} ${(_b = gap.endpoint.auth.scheme) !== null && _b !== void 0 ? _b : 'Bearer'} token)`);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
lines.push(`- **Auth:** Not required`);
|
|
131
|
-
}
|
|
132
|
-
lines.push(``);
|
|
133
|
-
lines.push(`### Project Context`);
|
|
134
|
-
lines.push(`- **Language:** ${flows.project.language}`);
|
|
135
|
-
lines.push(`- **Test Framework:** ${flows.project.testFramework}`);
|
|
136
|
-
lines.push(`- **App Import:** \`import { app } from '${flows.project.appImportPath}'\``);
|
|
137
|
-
if (gap.existingSimilarTests.length > 0) {
|
|
138
|
-
lines.push(`- **Existing Similar Tests:** See \`${gap.existingSimilarTests[0]}\` for patterns`);
|
|
139
|
-
}
|
|
140
|
-
lines.push(``);
|
|
141
|
-
lines.push(`### Copilot Instructions`);
|
|
142
|
-
lines.push(gap.copilotPrompt);
|
|
143
|
-
if (gap.generatedCode) {
|
|
144
|
-
lines.push(``);
|
|
145
|
-
lines.push(`### Generated Scaffold`);
|
|
146
|
-
lines.push(`\`\`\`typescript`);
|
|
147
|
-
lines.push(gap.generatedCode);
|
|
148
|
-
lines.push(`\`\`\``);
|
|
149
|
-
}
|
|
150
|
-
lines.push(``);
|
|
151
|
-
lines.push(`---`);
|
|
152
|
-
lines.push(``);
|
|
153
|
-
}
|
|
154
|
-
return lines.join('\n');
|
|
155
|
-
}
|
|
156
|
-
// ─── Similar test finder ──────────────────────────────────────────────────────
|
|
157
|
-
function findSimilarTests(apiPath) {
|
|
158
|
-
const testsDir = path.join(process.cwd(), 'tests');
|
|
159
|
-
if (!fs.existsSync(testsDir))
|
|
160
|
-
return [];
|
|
161
|
-
try {
|
|
162
|
-
const files = fs.readdirSync(testsDir).filter(f => f.endsWith('.test.ts') || f.endsWith('.test.js'));
|
|
163
|
-
// Return up to 2 similar test files
|
|
164
|
-
return files.slice(0, 2).map(f => `tests/${f}`);
|
|
165
|
-
}
|
|
166
|
-
catch {
|
|
167
|
-
return [];
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
171
|
-
async function exportAiFlows(opts) {
|
|
172
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
173
|
-
const format = (_a = opts.format) !== null && _a !== void 0 ? _a : 'both';
|
|
174
|
-
const maxGaps = (_b = opts.maxGaps) !== null && _b !== void 0 ? _b : 50;
|
|
175
|
-
const minPriority = (_c = opts.priority) !== null && _c !== void 0 ? _c : 'P3';
|
|
176
|
-
// Load discovery info
|
|
177
|
-
const summaryPath = path.join(opts.reportsDir, 'coverage-summary.json');
|
|
178
|
-
let projectName = 'my-api';
|
|
179
|
-
let language = 'typescript';
|
|
180
|
-
let testFramework = 'jest';
|
|
181
|
-
let appImportPath = '../../src/app';
|
|
182
|
-
if (fs.existsSync(summaryPath)) {
|
|
183
|
-
try {
|
|
184
|
-
const summary = JSON.parse(fs.readFileSync(summaryPath, 'utf8'));
|
|
185
|
-
projectName = (_e = (_d = summary.project) === null || _d === void 0 ? void 0 : _d.name) !== null && _e !== void 0 ? _e : projectName;
|
|
186
|
-
language = (_g = (_f = summary.discoveryInfo) === null || _f === void 0 ? void 0 : _f.language) !== null && _g !== void 0 ? _g : language;
|
|
187
|
-
testFramework = (_j = (_h = summary.discoveryInfo) === null || _h === void 0 ? void 0 : _h.testFramework) !== null && _j !== void 0 ? _j : testFramework;
|
|
188
|
-
appImportPath = (_l = (_k = summary.discoveryInfo) === null || _k === void 0 ? void 0 : _k.appImportPath) !== null && _l !== void 0 ? _l : appImportPath;
|
|
189
|
-
}
|
|
190
|
-
catch {
|
|
191
|
-
// Use defaults
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
// Extract and filter gaps
|
|
195
|
-
let gaps = (0, gap_extractor_1.extractGapsFromReports)(opts.reportsDir);
|
|
196
|
-
gaps = (0, file_router_1.sortGapsByPriority)(gaps.filter(g => priorityGte(g.priority, minPriority)));
|
|
197
|
-
gaps = gaps.slice(0, maxGaps);
|
|
198
|
-
const aiGaps = [];
|
|
199
|
-
for (const gap of gaps) {
|
|
200
|
-
const suggestedOutputPath = (0, file_router_1.routeOutputFile)(gap, 'unit', 'tests', language);
|
|
201
|
-
const discoveryInfo = {
|
|
202
|
-
name: projectName,
|
|
203
|
-
language,
|
|
204
|
-
framework: 'express',
|
|
205
|
-
testFramework,
|
|
206
|
-
baseUrl: 'http://localhost:3000',
|
|
207
|
-
projectRoot: process.cwd(),
|
|
208
|
-
appImportPath,
|
|
209
|
-
};
|
|
210
|
-
const ctx = (0, context_builder_1.buildContext)(gap, suggestedOutputPath, discoveryInfo);
|
|
211
|
-
const generatedCode = (0, template_renderer_1.renderTemplate)(ctx, { language, testType: 'unit' });
|
|
212
|
-
const missingTestCases = buildMissingTestCases(gap);
|
|
213
|
-
const existingSimilarTests = findSimilarTests(gap.endpoint.path);
|
|
214
|
-
const aiGap = {
|
|
215
|
-
gapId: gap.id,
|
|
216
|
-
priority: gap.priority,
|
|
217
|
-
riskScore: gap.riskScore,
|
|
218
|
-
type: gap.type,
|
|
219
|
-
endpoint: {
|
|
220
|
-
method: gap.endpoint.method,
|
|
221
|
-
path: gap.endpoint.path,
|
|
222
|
-
auth: {
|
|
223
|
-
required: gap.endpoint.auth.required,
|
|
224
|
-
type: gap.endpoint.auth.type,
|
|
225
|
-
scheme: gap.endpoint.auth.scheme,
|
|
226
|
-
},
|
|
227
|
-
},
|
|
228
|
-
missingTestCases,
|
|
229
|
-
copilotPrompt: '',
|
|
230
|
-
suggestedOutputPath,
|
|
231
|
-
existingSimilarTests,
|
|
232
|
-
generatedCode,
|
|
233
|
-
};
|
|
234
|
-
aiGap.copilotPrompt = buildCopilotPrompt(aiGap, projectName, testFramework, appImportPath);
|
|
235
|
-
aiGaps.push(aiGap);
|
|
236
|
-
}
|
|
237
|
-
const result = {
|
|
238
|
-
generatedAt: new Date().toISOString(),
|
|
239
|
-
project: {
|
|
240
|
-
name: projectName,
|
|
241
|
-
language,
|
|
242
|
-
testFramework,
|
|
243
|
-
appImportPath,
|
|
244
|
-
},
|
|
245
|
-
gaps: aiGaps,
|
|
246
|
-
};
|
|
247
|
-
// Write outputs
|
|
248
|
-
fs.mkdirSync(opts.outDir, { recursive: true });
|
|
249
|
-
if (format === 'json' || format === 'both') {
|
|
250
|
-
const jsonPath = path.join(opts.outDir, 'ai-ready-flows.json');
|
|
251
|
-
fs.writeFileSync(jsonPath, JSON.stringify(result, null, 2), 'utf8');
|
|
252
|
-
console.log(`AI flows JSON written to: ${jsonPath}`);
|
|
253
|
-
}
|
|
254
|
-
if (format === 'markdown' || format === 'both') {
|
|
255
|
-
const mdPath = path.join(opts.outDir, 'ai-ready-flows.md');
|
|
256
|
-
fs.writeFileSync(mdPath, buildMarkdown(result), 'utf8');
|
|
257
|
-
console.log(`AI flows Markdown written to: ${mdPath}`);
|
|
258
|
-
}
|
|
259
|
-
return result;
|
|
260
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Feature 28 — Test Generation & Quality Intelligence Engine
|
|
3
|
-
* Public API exports
|
|
4
|
-
*/
|
|
5
|
-
export { TestGenerationEngine, generateTests } from './engine';
|
|
6
|
-
export { scoreTests, scoreFile } from './quality-scorer';
|
|
7
|
-
export { exportAiFlows } from './ai-flow-exporter';
|
|
8
|
-
export type { DetectedGap, GeneratedFile, GenerationResult, GenerationOptions, TestQualityReport, FileQualityScore, AiReadyFlows, AiFlowGap, AiFlowExporterOptions, GenerationConfig, TestQualityConfig, AiFlowsConfig, } from './types';
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generation/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACd,MAAM,SAAS,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Feature 28 — Test Generation & Quality Intelligence Engine
|
|
4
|
-
* Public API exports
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.exportAiFlows = exports.scoreFile = exports.scoreTests = exports.generateTests = exports.TestGenerationEngine = void 0;
|
|
8
|
-
var engine_1 = require("./engine");
|
|
9
|
-
Object.defineProperty(exports, "TestGenerationEngine", { enumerable: true, get: function () { return engine_1.TestGenerationEngine; } });
|
|
10
|
-
Object.defineProperty(exports, "generateTests", { enumerable: true, get: function () { return engine_1.generateTests; } });
|
|
11
|
-
var quality_scorer_1 = require("./quality-scorer");
|
|
12
|
-
Object.defineProperty(exports, "scoreTests", { enumerable: true, get: function () { return quality_scorer_1.scoreTests; } });
|
|
13
|
-
Object.defineProperty(exports, "scoreFile", { enumerable: true, get: function () { return quality_scorer_1.scoreFile; } });
|
|
14
|
-
var ai_flow_exporter_1 = require("./ai-flow-exporter");
|
|
15
|
-
Object.defineProperty(exports, "exportAiFlows", { enumerable: true, get: function () { return ai_flow_exporter_1.exportAiFlows; } });
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Feature 28 — QualityScorer
|
|
3
|
-
* Scores existing test files on 5 dimensions (0–100 total).
|
|
4
|
-
*
|
|
5
|
-
* Dimensions (20 pts each):
|
|
6
|
-
* 1. Assertion Depth
|
|
7
|
-
* 2. Negative Path Coverage
|
|
8
|
-
* 3. Auth Coverage
|
|
9
|
-
* 4. Boundary Coverage
|
|
10
|
-
* 5. Test Independence
|
|
11
|
-
*/
|
|
12
|
-
import type { FileQualityScore, TestQualityReport, QualityScorerOptions } from './types';
|
|
13
|
-
export declare function scoreFile(filePath: string): FileQualityScore;
|
|
14
|
-
export declare function scoreTests(opts: QualityScorerOptions): Promise<TestQualityReport>;
|
|
15
|
-
//# sourceMappingURL=quality-scorer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"quality-scorer.d.ts","sourceRoot":"","sources":["../../../src/generation/quality-scorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EACV,gBAAgB,EAEhB,iBAAiB,EACjB,oBAAoB,EAErB,MAAM,SAAS,CAAC;AA8JjB,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAoB5D;AAID,wBAAsB,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsEvF"}
|
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Feature 28 — QualityScorer
|
|
4
|
-
* Scores existing test files on 5 dimensions (0–100 total).
|
|
5
|
-
*
|
|
6
|
-
* Dimensions (20 pts each):
|
|
7
|
-
* 1. Assertion Depth
|
|
8
|
-
* 2. Negative Path Coverage
|
|
9
|
-
* 3. Auth Coverage
|
|
10
|
-
* 4. Boundary Coverage
|
|
11
|
-
* 5. Test Independence
|
|
12
|
-
*/
|
|
13
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
-
}
|
|
19
|
-
Object.defineProperty(o, k2, desc);
|
|
20
|
-
}) : (function(o, m, k, k2) {
|
|
21
|
-
if (k2 === undefined) k2 = k;
|
|
22
|
-
o[k2] = m[k];
|
|
23
|
-
}));
|
|
24
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
-
}) : function(o, v) {
|
|
27
|
-
o["default"] = v;
|
|
28
|
-
});
|
|
29
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
-
var ownKeys = function(o) {
|
|
31
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
-
var ar = [];
|
|
33
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
-
return ar;
|
|
35
|
-
};
|
|
36
|
-
return ownKeys(o);
|
|
37
|
-
};
|
|
38
|
-
return function (mod) {
|
|
39
|
-
if (mod && mod.__esModule) return mod;
|
|
40
|
-
var result = {};
|
|
41
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
-
__setModuleDefault(result, mod);
|
|
43
|
-
return result;
|
|
44
|
-
};
|
|
45
|
-
})();
|
|
46
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
47
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
48
|
-
};
|
|
49
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
-
exports.scoreFile = scoreFile;
|
|
51
|
-
exports.scoreTests = scoreTests;
|
|
52
|
-
const fs = __importStar(require("fs"));
|
|
53
|
-
const path = __importStar(require("path"));
|
|
54
|
-
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
55
|
-
// ─── Assertion depth scoring ──────────────────────────────────────────────────
|
|
56
|
-
function scoreAssertionDepth(content) {
|
|
57
|
-
// +20 — specific field value assertions
|
|
58
|
-
if (/expect\([^)]+\)\.(toBe|toEqual|toStrictEqual|toContain|toHaveProperty)\(/.test(content)) {
|
|
59
|
-
// Check if it's a specific value (not just existence)
|
|
60
|
-
if (/\.toBe\([^)]{3,}\)/.test(content) || /\.toEqual\([^)]{3,}\)/.test(content)) {
|
|
61
|
-
return 20;
|
|
62
|
-
}
|
|
63
|
-
// toHaveProperty with a value
|
|
64
|
-
if (/\.toHaveProperty\('[^']+',/.test(content)) {
|
|
65
|
-
return 20;
|
|
66
|
-
}
|
|
67
|
-
return 15;
|
|
68
|
-
}
|
|
69
|
-
// +10 — only status code assertions
|
|
70
|
-
if (/expect\(response\.status\)\.toBe\(/.test(content) && !/expect\(response\.body\)/.test(content)) {
|
|
71
|
-
return 10;
|
|
72
|
-
}
|
|
73
|
-
// +5 — weak assertions
|
|
74
|
-
if (/\.toBeTruthy\(\)|\.toBeDefined\(\)/.test(content)) {
|
|
75
|
-
return 5;
|
|
76
|
-
}
|
|
77
|
-
// +15 — property existence checks
|
|
78
|
-
if (/\.toHaveProperty\(/.test(content)) {
|
|
79
|
-
return 15;
|
|
80
|
-
}
|
|
81
|
-
// +10 — has some assertions
|
|
82
|
-
if (/expect\(/.test(content)) {
|
|
83
|
-
return 10;
|
|
84
|
-
}
|
|
85
|
-
return 0;
|
|
86
|
-
}
|
|
87
|
-
// ─── Negative path coverage ───────────────────────────────────────────────────
|
|
88
|
-
function scoreNegativePathCoverage(content) {
|
|
89
|
-
const has4xx = /toBe\(4\d{2}\)|toBe\(401\)|toBe\(403\)|toBe\(404\)|toBe\(422\)|toBe\(400\)/.test(content);
|
|
90
|
-
const has5xx = /toBe\(5\d{2}\)|toBe\(500\)/.test(content);
|
|
91
|
-
const hasErrorPath = /error|invalid|fail|missing|unauthorized|forbidden|not.found/i.test(content);
|
|
92
|
-
if (has4xx && (has5xx || hasErrorPath))
|
|
93
|
-
return 20;
|
|
94
|
-
if (has4xx)
|
|
95
|
-
return 15;
|
|
96
|
-
if (hasErrorPath)
|
|
97
|
-
return 10;
|
|
98
|
-
return 0;
|
|
99
|
-
}
|
|
100
|
-
// ─── Auth coverage ────────────────────────────────────────────────────────────
|
|
101
|
-
function scoreAuthCoverage(content) {
|
|
102
|
-
const hasAuthTest = /401|403|Authorization|auth.*token|token.*auth/i.test(content);
|
|
103
|
-
const hasBothPaths = /401/.test(content) && /200|201/.test(content);
|
|
104
|
-
const hasOptionalAuth = /optional.*auth|without.*auth|with.*auth/i.test(content);
|
|
105
|
-
if (hasBothPaths && hasOptionalAuth)
|
|
106
|
-
return 20;
|
|
107
|
-
if (hasBothPaths)
|
|
108
|
-
return 15;
|
|
109
|
-
if (hasAuthTest)
|
|
110
|
-
return 10;
|
|
111
|
-
return 0;
|
|
112
|
-
}
|
|
113
|
-
// ─── Boundary coverage ────────────────────────────────────────────────────────
|
|
114
|
-
function scoreBoundaryCoverage(content) {
|
|
115
|
-
const hasBoundaryMax = /max|maximum|overflow|too.long|too.large/i.test(content);
|
|
116
|
-
const hasBoundaryMin = /min|minimum|empty|too.short|too.small/i.test(content);
|
|
117
|
-
const hasNullTest = /null|undefined|missing.*required/i.test(content);
|
|
118
|
-
if (hasBoundaryMax && hasBoundaryMin && hasNullTest)
|
|
119
|
-
return 20;
|
|
120
|
-
if ((hasBoundaryMax || hasBoundaryMin) && hasNullTest)
|
|
121
|
-
return 15;
|
|
122
|
-
if (hasBoundaryMax || hasBoundaryMin)
|
|
123
|
-
return 10;
|
|
124
|
-
if (hasNullTest)
|
|
125
|
-
return 8;
|
|
126
|
-
return 0;
|
|
127
|
-
}
|
|
128
|
-
// ─── Test independence ────────────────────────────────────────────────────────
|
|
129
|
-
function scoreTestIndependence(content) {
|
|
130
|
-
// Deduct points for ordered dependencies
|
|
131
|
-
const hasAfterEach = /afterEach|afterAll/.test(content);
|
|
132
|
-
const hasBeforeEach = /beforeEach/.test(content);
|
|
133
|
-
const hasSharedMutableState = /let\s+\w+\s*;/.test(content) && !/beforeAll/.test(content);
|
|
134
|
-
// Has cleanup
|
|
135
|
-
if (hasAfterEach)
|
|
136
|
-
return 20;
|
|
137
|
-
// Uses beforeEach for isolation (good pattern for unit tests)
|
|
138
|
-
if (hasBeforeEach && !hasSharedMutableState)
|
|
139
|
-
return 18;
|
|
140
|
-
// Shared mutable state without cleanup (risky for parallelism)
|
|
141
|
-
if (hasSharedMutableState)
|
|
142
|
-
return 10;
|
|
143
|
-
// Simple independent tests
|
|
144
|
-
return 15;
|
|
145
|
-
}
|
|
146
|
-
// ─── Issue detection ──────────────────────────────────────────────────────────
|
|
147
|
-
function detectIssues(content, dimensions) {
|
|
148
|
-
const issues = [];
|
|
149
|
-
if (dimensions.assertionDepth < 10) {
|
|
150
|
-
issues.push('No meaningful assertions found — tests may pass even if the endpoint is broken');
|
|
151
|
-
}
|
|
152
|
-
else if (dimensions.assertionDepth < 15) {
|
|
153
|
-
issues.push('Only status code assertions, no body validation');
|
|
154
|
-
}
|
|
155
|
-
if (dimensions.negativePathCoverage < 10) {
|
|
156
|
-
issues.push('No error path coverage — 4xx/5xx scenarios not tested');
|
|
157
|
-
}
|
|
158
|
-
if (dimensions.authCoverage < 10 && /Authorization|auth.*token/i.test(content)) {
|
|
159
|
-
issues.push('Auth coverage incomplete: only happy path tested, no 401 scenario');
|
|
160
|
-
}
|
|
161
|
-
else if (dimensions.authCoverage < 15) {
|
|
162
|
-
issues.push('Auth coverage incomplete: optional-auth path not tested');
|
|
163
|
-
}
|
|
164
|
-
if (dimensions.boundaryCoverage < 8) {
|
|
165
|
-
issues.push('No boundary tests found (min/max/null/empty values not tested)');
|
|
166
|
-
}
|
|
167
|
-
if (dimensions.testIndependence < 15) {
|
|
168
|
-
issues.push('Tests may have ordering dependencies — shared mutable state without cleanup');
|
|
169
|
-
}
|
|
170
|
-
return issues;
|
|
171
|
-
}
|
|
172
|
-
function detectStrengths(content, dimensions) {
|
|
173
|
-
const strengths = [];
|
|
174
|
-
if (dimensions.assertionDepth >= 18) {
|
|
175
|
-
strengths.push('Good assertion depth on response body fields');
|
|
176
|
-
}
|
|
177
|
-
if (dimensions.negativePathCoverage >= 18) {
|
|
178
|
-
strengths.push('All error scenarios covered');
|
|
179
|
-
}
|
|
180
|
-
if (dimensions.authCoverage >= 18) {
|
|
181
|
-
strengths.push('Both authenticated and unauthenticated paths tested');
|
|
182
|
-
}
|
|
183
|
-
if (dimensions.boundaryCoverage >= 18) {
|
|
184
|
-
strengths.push('Comprehensive boundary testing');
|
|
185
|
-
}
|
|
186
|
-
if (dimensions.testIndependence >= 18) {
|
|
187
|
-
strengths.push('Tests are well-isolated and independent');
|
|
188
|
-
}
|
|
189
|
-
return strengths;
|
|
190
|
-
}
|
|
191
|
-
// ─── File scorer ──────────────────────────────────────────────────────────────
|
|
192
|
-
function scoreFile(filePath) {
|
|
193
|
-
const content = fs.readFileSync(filePath, 'utf8');
|
|
194
|
-
const dimensions = {
|
|
195
|
-
assertionDepth: scoreAssertionDepth(content),
|
|
196
|
-
negativePathCoverage: scoreNegativePathCoverage(content),
|
|
197
|
-
authCoverage: scoreAuthCoverage(content),
|
|
198
|
-
boundaryCoverage: scoreBoundaryCoverage(content),
|
|
199
|
-
testIndependence: scoreTestIndependence(content),
|
|
200
|
-
};
|
|
201
|
-
const score = Object.values(dimensions).reduce((sum, v) => sum + v, 0);
|
|
202
|
-
return {
|
|
203
|
-
file: filePath,
|
|
204
|
-
score,
|
|
205
|
-
dimensions,
|
|
206
|
-
issues: detectIssues(content, dimensions),
|
|
207
|
-
strengths: detectStrengths(content, dimensions),
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
// ─── Report builder ───────────────────────────────────────────────────────────
|
|
211
|
-
async function scoreTests(opts) {
|
|
212
|
-
var _a, _b;
|
|
213
|
-
const testsGlob = (_a = opts.testsGlob) !== null && _a !== void 0 ? _a : 'tests/**/*.test.ts';
|
|
214
|
-
const reportsDir = (_b = opts.reportsDir) !== null && _b !== void 0 ? _b : 'reports';
|
|
215
|
-
const files = await (0, fast_glob_1.default)(testsGlob, { cwd: process.cwd(), absolute: true });
|
|
216
|
-
const byFile = [];
|
|
217
|
-
for (const file of files) {
|
|
218
|
-
try {
|
|
219
|
-
byFile.push(scoreFile(file));
|
|
220
|
-
}
|
|
221
|
-
catch {
|
|
222
|
-
// Skip unreadable files
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
const overallScore = byFile.length > 0
|
|
226
|
-
? Math.round(byFile.reduce((sum, f) => sum + f.score, 0) / byFile.length)
|
|
227
|
-
: 0;
|
|
228
|
-
const sorted = [...byFile].sort((a, b) => a.score - b.score);
|
|
229
|
-
const lowestQualityFiles = sorted.slice(0, 3).map(f => path.relative(process.cwd(), f.file));
|
|
230
|
-
// Build high-risk + low-quality gaps (stub — would cross-reference with gap data)
|
|
231
|
-
const highestRiskLowQualityGaps = sorted
|
|
232
|
-
.filter(f => f.score < 60)
|
|
233
|
-
.slice(0, 5)
|
|
234
|
-
.map(f => {
|
|
235
|
-
var _a;
|
|
236
|
-
return ({
|
|
237
|
-
endpoint: path.relative(process.cwd(), f.file),
|
|
238
|
-
qualityScore: f.score,
|
|
239
|
-
riskScore: 70,
|
|
240
|
-
primaryIssue: (_a = f.issues[0]) !== null && _a !== void 0 ? _a : 'Low quality score',
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
const report = {
|
|
244
|
-
overallScore,
|
|
245
|
-
byFile: byFile.map(f => ({ ...f, file: path.relative(process.cwd(), f.file) })),
|
|
246
|
-
lowestQualityFiles,
|
|
247
|
-
highestRiskLowQualityGaps,
|
|
248
|
-
};
|
|
249
|
-
// Write output
|
|
250
|
-
fs.mkdirSync(reportsDir, { recursive: true });
|
|
251
|
-
const outputPath = path.join(reportsDir, 'test-quality.json');
|
|
252
|
-
fs.writeFileSync(outputPath, JSON.stringify(report, null, 2), 'utf8');
|
|
253
|
-
// Also update coverage-summary.json if present
|
|
254
|
-
const summaryPath = path.join(reportsDir, 'coverage-summary.json');
|
|
255
|
-
if (fs.existsSync(summaryPath)) {
|
|
256
|
-
try {
|
|
257
|
-
const summary = JSON.parse(fs.readFileSync(summaryPath, 'utf8'));
|
|
258
|
-
summary['testQuality'] = report;
|
|
259
|
-
fs.writeFileSync(summaryPath, JSON.stringify(summary, null, 2), 'utf8');
|
|
260
|
-
}
|
|
261
|
-
catch {
|
|
262
|
-
// Non-fatal
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
if (opts.failBelow && opts.failBelow > 0) {
|
|
266
|
-
const failing = byFile.filter(f => f.score < opts.failBelow);
|
|
267
|
-
if (failing.length > 0) {
|
|
268
|
-
throw new Error(`Quality gate failed: ${failing.length} test file(s) scored below ${opts.failBelow}.\n` +
|
|
269
|
-
failing.map(f => ` ${path.relative(process.cwd(), f.file)}: ${f.score}/100`).join('\n'));
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
return report;
|
|
273
|
-
}
|
|
File without changes
|