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
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Flask Blueprint detector (Feature 27)
|
|
4
|
+
*
|
|
5
|
+
* Detects from raw Python file content:
|
|
6
|
+
* 1. Blueprint() constructor calls → blueprint-definition nodes
|
|
7
|
+
* 2. @blueprint.route() decorators with HTTP methods → endpoint nodes (marked
|
|
8
|
+
* cross-file-unresolved until url_prefix is resolved by FlaskBlueprintResolver)
|
|
9
|
+
* 3. app.register_blueprint() calls → blueprint-registration nodes
|
|
10
|
+
* 4. @use_kwargs({...}) decorator → parameter nodes with location inference
|
|
11
|
+
* 5. @marshal_with(schema, code=N) → response-schema nodes
|
|
12
|
+
* 6. @jwt_required / @jwt_optional / @jwt_required(optional=True) → security nodes
|
|
13
|
+
*
|
|
14
|
+
* RULE-SA01: never infers role from directory — only from code content
|
|
15
|
+
* RULE-SA02: endpoint nodes are emitted with resolution: 'cross-file-unresolved'
|
|
16
|
+
* when url_prefix is not visible in the same file
|
|
17
|
+
* RULE-SA04: @jwt_optional → security.optional = true — NEVER classified as public
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.FlaskBlueprintDetector = void 0;
|
|
21
|
+
const types_1 = require("./types");
|
|
22
|
+
class FlaskBlueprintDetector {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.name = 'flask-blueprint';
|
|
25
|
+
}
|
|
26
|
+
detect(fileContent, filePath) {
|
|
27
|
+
if (!filePath.endsWith('.py'))
|
|
28
|
+
return [];
|
|
29
|
+
const nodes = [];
|
|
30
|
+
const lines = fileContent.split('\n');
|
|
31
|
+
// ── Pass 1: collect Blueprint() constructor calls ─────────────────────
|
|
32
|
+
// Pattern: varName = Blueprint('name', __name__[, url_prefix='...'])
|
|
33
|
+
const blueprintCtorPattern = /^(\w+)\s*=\s*Blueprint\s*\(\s*['"]([^'"]+)['"]\s*,\s*__name__(?:\s*,\s*url_prefix\s*=\s*['"]([^'"]*)['"]\s*)?\)/;
|
|
34
|
+
for (let i = 0; i < lines.length; i++) {
|
|
35
|
+
const line = lines[i].trim();
|
|
36
|
+
const m = line.match(blueprintCtorPattern);
|
|
37
|
+
if (!m)
|
|
38
|
+
continue;
|
|
39
|
+
const varName = m[1];
|
|
40
|
+
const bpName = m[2];
|
|
41
|
+
const urlPrefix = m[3];
|
|
42
|
+
nodes.push({
|
|
43
|
+
id: (0, types_1.makeNodeId)(filePath, 'blueprint-definition', varName, i + 1),
|
|
44
|
+
kind: 'blueprint-definition',
|
|
45
|
+
name: varName,
|
|
46
|
+
filePath,
|
|
47
|
+
line: i + 1,
|
|
48
|
+
urlPrefix: urlPrefix !== null && urlPrefix !== void 0 ? urlPrefix : undefined,
|
|
49
|
+
resolution: urlPrefix ? 'resolved' : 'cross-file-unresolved',
|
|
50
|
+
diagnosticMessage: urlPrefix
|
|
51
|
+
? undefined
|
|
52
|
+
: `Blueprint '${bpName}' has no inline url_prefix — awaiting register_blueprint() call`,
|
|
53
|
+
validationConstraints: { blueprintName: bpName },
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// ── Pass 2: collect decorator stacks and route registrations ─────────
|
|
57
|
+
// We walk backwards from each def statement collecting all decorators above it.
|
|
58
|
+
const decoratorLinePattern = /^\s*@(.+)/;
|
|
59
|
+
const defLinePattern = /^\s*def\s+(\w+)\s*\(/;
|
|
60
|
+
// Collect (defLine index → decorators[])
|
|
61
|
+
const decoratorsByDef = new Map();
|
|
62
|
+
let pendingDecorators = [];
|
|
63
|
+
for (let i = 0; i < lines.length; i++) {
|
|
64
|
+
const trimmed = lines[i].trim();
|
|
65
|
+
const decMatch = trimmed.match(decoratorLinePattern);
|
|
66
|
+
if (decMatch) {
|
|
67
|
+
pendingDecorators.push({ text: decMatch[1].trim(), line: i + 1 });
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const defMatch = trimmed.match(defLinePattern);
|
|
71
|
+
if (defMatch) {
|
|
72
|
+
decoratorsByDef.set(i, pendingDecorators);
|
|
73
|
+
pendingDecorators = [];
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
// Non-decorator, non-def line: reset pending decorators if not blank
|
|
77
|
+
if (trimmed !== '' && !trimmed.startsWith('#')) {
|
|
78
|
+
pendingDecorators = [];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// ── Pass 3: process each def's decorator stack ────────────────────────
|
|
82
|
+
for (const [defLineIdx, decorators] of decoratorsByDef) {
|
|
83
|
+
const defLine = lines[defLineIdx].trim();
|
|
84
|
+
const defMatch = defLine.match(defLinePattern);
|
|
85
|
+
if (!defMatch)
|
|
86
|
+
continue;
|
|
87
|
+
const funcName = defMatch[1];
|
|
88
|
+
// Separate route decorators from security / kwargs / marshal decorators
|
|
89
|
+
let routePath;
|
|
90
|
+
let routeMethods = ['GET'];
|
|
91
|
+
let routeBlueprintVar;
|
|
92
|
+
let security = parseSecurity(decorators);
|
|
93
|
+
const paramNodes = parseUseKwargs(decorators, funcName, filePath, defLineIdx + 1, routeMethods);
|
|
94
|
+
const responseNodes = parseMarshalWith(decorators, funcName, filePath, defLineIdx + 1);
|
|
95
|
+
for (const dec of decorators) {
|
|
96
|
+
// @blueprint.route('/path', methods=(...))
|
|
97
|
+
const routeMatch = dec.text.match(/^(\w+)\.route\s*\(\s*['"]([^'"]+)['"]\s*(?:,\s*methods\s*=\s*\(([^)]*)\))?\s*\)/);
|
|
98
|
+
if (routeMatch) {
|
|
99
|
+
routeBlueprintVar = routeMatch[1];
|
|
100
|
+
routePath = routeMatch[2];
|
|
101
|
+
if (routeMatch[3]) {
|
|
102
|
+
routeMethods = routeMatch[3]
|
|
103
|
+
.split(',')
|
|
104
|
+
.map((m) => m.trim().replace(/['"]/g, ''))
|
|
105
|
+
.filter((m) => m.length > 0);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (routePath !== undefined && routeBlueprintVar !== undefined) {
|
|
110
|
+
// Check if this blueprint var has an inline url_prefix in the same file
|
|
111
|
+
const bpDef = nodes.find((n) => n.kind === 'blueprint-definition' && n.name === routeBlueprintVar);
|
|
112
|
+
const isResolved = (bpDef === null || bpDef === void 0 ? void 0 : bpDef.urlPrefix) !== undefined || (bpDef === null || bpDef === void 0 ? void 0 : bpDef.resolution) === 'resolved';
|
|
113
|
+
nodes.push({
|
|
114
|
+
id: (0, types_1.makeNodeId)(filePath, 'endpoint', funcName, defLineIdx + 1),
|
|
115
|
+
kind: 'endpoint',
|
|
116
|
+
name: funcName,
|
|
117
|
+
filePath,
|
|
118
|
+
line: defLineIdx + 1,
|
|
119
|
+
httpPath: routePath,
|
|
120
|
+
httpMethods: routeMethods,
|
|
121
|
+
protocol: 'rest',
|
|
122
|
+
security,
|
|
123
|
+
resolution: isResolved ? 'resolved' : 'cross-file-unresolved',
|
|
124
|
+
diagnosticMessage: isResolved
|
|
125
|
+
? undefined
|
|
126
|
+
: `Endpoint '${funcName}' url_prefix depends on register_blueprint() call in another file`,
|
|
127
|
+
});
|
|
128
|
+
nodes.push(...paramNodes);
|
|
129
|
+
nodes.push(...responseNodes);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// ── Pass 4: collect register_blueprint() calls ────────────────────────
|
|
133
|
+
// Pattern: app.register_blueprint(varName[, url_prefix='/...'])
|
|
134
|
+
const registerPattern = /\bregister_blueprint\s*\(\s*(\w+)(?:\s*,\s*url_prefix\s*=\s*['"]([^'"]*)['"]\s*)?\)/;
|
|
135
|
+
for (let i = 0; i < lines.length; i++) {
|
|
136
|
+
const m = lines[i].match(registerPattern);
|
|
137
|
+
if (!m)
|
|
138
|
+
continue;
|
|
139
|
+
const targetVar = m[1];
|
|
140
|
+
const urlPrefix = m[2];
|
|
141
|
+
nodes.push({
|
|
142
|
+
id: (0, types_1.makeNodeId)(filePath, 'blueprint-registration', targetVar, i + 1),
|
|
143
|
+
kind: 'blueprint-registration',
|
|
144
|
+
name: targetVar,
|
|
145
|
+
filePath,
|
|
146
|
+
line: i + 1,
|
|
147
|
+
urlPrefix: urlPrefix !== null && urlPrefix !== void 0 ? urlPrefix : undefined,
|
|
148
|
+
targetModule: targetVar,
|
|
149
|
+
resolution: 'cross-file-unresolved', // target module may be in another file
|
|
150
|
+
diagnosticMessage: `register_blueprint('${targetVar}') — target may be defined in another file`,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return nodes;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.FlaskBlueprintDetector = FlaskBlueprintDetector;
|
|
157
|
+
// ─── Security parsing ─────────────────────────────────────────────────────────
|
|
158
|
+
function parseSecurity(decorators) {
|
|
159
|
+
for (const dec of decorators) {
|
|
160
|
+
const text = dec.text;
|
|
161
|
+
// @jwt_required(optional=True) — v4+ optional
|
|
162
|
+
if (/^jwt_required\s*\(\s*optional\s*=\s*True\s*\)/.test(text)) {
|
|
163
|
+
return { type: 'jwt', required: false, optional: true, sourcePattern: '@jwt_required(optional=True)' };
|
|
164
|
+
}
|
|
165
|
+
// @jwt_required(fresh=True)
|
|
166
|
+
if (/^jwt_required\s*\(\s*fresh\s*=\s*True\s*\)/.test(text)) {
|
|
167
|
+
return { type: 'jwt', required: true, optional: false, sourcePattern: '@jwt_required(fresh=True)' };
|
|
168
|
+
}
|
|
169
|
+
// @jwt_required() or @jwt_required — required auth (RULE-SA04)
|
|
170
|
+
if (/^jwt_required(\s*\(\s*\))?$/.test(text)) {
|
|
171
|
+
return { type: 'jwt', required: true, optional: false, sourcePattern: '@jwt_required' };
|
|
172
|
+
}
|
|
173
|
+
// @jwt_optional — v3 bare decorator (RULE-SA04: must NEVER be classified as public)
|
|
174
|
+
if (/^jwt_optional(\s*\(\s*\))?$/.test(text)) {
|
|
175
|
+
return { type: 'jwt', required: false, optional: true, sourcePattern: '@jwt_optional' };
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
// ─── @use_kwargs parsing ──────────────────────────────────────────────────────
|
|
181
|
+
function parseUseKwargs(decorators, funcName, filePath, baseLine, routeMethods) {
|
|
182
|
+
const nodes = [];
|
|
183
|
+
for (const dec of decorators) {
|
|
184
|
+
// @use_kwargs({...}[, location='...'])
|
|
185
|
+
if (!dec.text.startsWith('use_kwargs'))
|
|
186
|
+
continue;
|
|
187
|
+
// Extract explicit location kwarg
|
|
188
|
+
const locationMatch = dec.text.match(/location\s*=\s*['"](\w+)['"]/);
|
|
189
|
+
const explicitLocation = locationMatch ? locationMatch[1] : undefined;
|
|
190
|
+
// Infer location from HTTP methods if not explicit
|
|
191
|
+
const inferredLocation = inferParamLocation(routeMethods, explicitLocation);
|
|
192
|
+
// Extract field names from simple dict patterns like {'tag': fields.Str(), 'limit': fields.Int()}
|
|
193
|
+
const fieldPattern = /['"](\w+)['"]\s*:\s*fields\.\w+/g;
|
|
194
|
+
let fieldMatch;
|
|
195
|
+
while ((fieldMatch = fieldPattern.exec(dec.text)) !== null) {
|
|
196
|
+
const paramName = fieldMatch[1];
|
|
197
|
+
const isRequired = new RegExp(`['"]${paramName}['"].*?required\\s*=\\s*True`).test(dec.text);
|
|
198
|
+
nodes.push({
|
|
199
|
+
id: (0, types_1.makeNodeId)(filePath, 'parameter', `${funcName}.${paramName}`, dec.line),
|
|
200
|
+
kind: 'parameter',
|
|
201
|
+
name: `${funcName}.${paramName}`,
|
|
202
|
+
filePath,
|
|
203
|
+
line: dec.line,
|
|
204
|
+
parameterName: paramName,
|
|
205
|
+
parameterLocation: inferredLocation,
|
|
206
|
+
required: isRequired,
|
|
207
|
+
resolution: 'resolved',
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
// Schema class passed directly: @use_kwargs(UserSchema)
|
|
211
|
+
const schemaMatch = dec.text.match(/^use_kwargs\s*\(\s*(\w+Schema)\s*\)/);
|
|
212
|
+
if (schemaMatch) {
|
|
213
|
+
nodes.push({
|
|
214
|
+
id: (0, types_1.makeNodeId)(filePath, 'parameter', `${funcName}.schema:${schemaMatch[1]}`, dec.line),
|
|
215
|
+
kind: 'parameter',
|
|
216
|
+
name: `${funcName}.schema:${schemaMatch[1]}`,
|
|
217
|
+
filePath,
|
|
218
|
+
line: dec.line,
|
|
219
|
+
parameterName: schemaMatch[1],
|
|
220
|
+
parameterLocation: inferredLocation,
|
|
221
|
+
resolution: 'cross-file-unresolved',
|
|
222
|
+
diagnosticMessage: `Schema class '${schemaMatch[1]}' fields not resolved — defined in another file`,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return nodes;
|
|
227
|
+
}
|
|
228
|
+
function inferParamLocation(methods, explicit) {
|
|
229
|
+
if (explicit)
|
|
230
|
+
return explicit;
|
|
231
|
+
const upper = methods.map((m) => m.toUpperCase());
|
|
232
|
+
if (upper.some((m) => m === 'POST' || m === 'PUT' || m === 'PATCH'))
|
|
233
|
+
return 'json';
|
|
234
|
+
return 'query'; // GET, HEAD, DELETE, OPTIONS
|
|
235
|
+
}
|
|
236
|
+
// ─── @marshal_with parsing ────────────────────────────────────────────────────
|
|
237
|
+
function parseMarshalWith(decorators, funcName, filePath, baseLine) {
|
|
238
|
+
const nodes = [];
|
|
239
|
+
for (const dec of decorators) {
|
|
240
|
+
if (!dec.text.startsWith('marshal_with'))
|
|
241
|
+
continue;
|
|
242
|
+
// Extract code= kwarg
|
|
243
|
+
const codeMatch = dec.text.match(/code\s*=\s*(\d+)/);
|
|
244
|
+
const statusCode = codeMatch ? parseInt(codeMatch[1], 10) : 200;
|
|
245
|
+
// Extract schema name (first argument)
|
|
246
|
+
const schemaMatch = dec.text.match(/^marshal_with\s*\(\s*(\w+)/);
|
|
247
|
+
const schemaName = schemaMatch ? schemaMatch[1] : 'unknown';
|
|
248
|
+
nodes.push({
|
|
249
|
+
id: (0, types_1.makeNodeId)(filePath, 'response-schema', `${funcName}.response:${statusCode}`, dec.line),
|
|
250
|
+
kind: 'response-schema',
|
|
251
|
+
name: `${funcName}.response:${statusCode}`,
|
|
252
|
+
filePath,
|
|
253
|
+
line: dec.line,
|
|
254
|
+
responseStatusCode: statusCode,
|
|
255
|
+
modelName: schemaName !== 'None' ? schemaName : undefined,
|
|
256
|
+
resolution: schemaName === 'unknown' || schemaName === 'None' ? 'resolved' : 'cross-file-unresolved',
|
|
257
|
+
diagnosticMessage: schemaName !== 'None' && schemaName !== 'unknown'
|
|
258
|
+
? `Response schema '${schemaName}' may be defined in another file`
|
|
259
|
+
: undefined,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
return nodes;
|
|
263
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spring Boot DDD layer detector (Feature 27)
|
|
3
|
+
*
|
|
4
|
+
* Detects from raw Java/Kotlin file content WITHOUT requiring @Service/@Repository
|
|
5
|
+
* annotations (RULE-SA03). Uses structural inference:
|
|
6
|
+
*
|
|
7
|
+
* 1. Repository interfaces — interfaces named XRepository/XRepo/XStore/XGateway
|
|
8
|
+
* or interfaces containing findByX / save / delete methods
|
|
9
|
+
* 2. Repository implementations — classes implementing a XRepository interface
|
|
10
|
+
* 3. CQRS handlers — classes with execute/handle/apply methods taking XCommand/XQuery
|
|
11
|
+
* 4. DDD service layer — classes in 'application'/'command'/'query'/'usecase' packages
|
|
12
|
+
* 5. Domain layer — classes in 'domain' package
|
|
13
|
+
* 6. Infrastructure layer — classes in 'infrastructure'/'persistence'/'adapter' packages
|
|
14
|
+
*
|
|
15
|
+
* RULE-SA01: directory name is used only as a tie-breaker, never as primary evidence
|
|
16
|
+
* RULE-SA03: @Service/@Repository absence does NOT prevent node creation
|
|
17
|
+
*/
|
|
18
|
+
import type { DetectedNode, Detector } from './types';
|
|
19
|
+
export declare class SpringDddDetector implements Detector {
|
|
20
|
+
readonly name = "spring-ddd";
|
|
21
|
+
detect(fileContent: string, filePath: string): DetectedNode[];
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=springDddDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"springDddDetector.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/detectors/springDddDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGtD,qBAAa,iBAAkB,YAAW,QAAQ;IAChD,QAAQ,CAAC,IAAI,gBAAgB;IAE7B,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE;CAiE9D"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Spring Boot DDD layer detector (Feature 27)
|
|
4
|
+
*
|
|
5
|
+
* Detects from raw Java/Kotlin file content WITHOUT requiring @Service/@Repository
|
|
6
|
+
* annotations (RULE-SA03). Uses structural inference:
|
|
7
|
+
*
|
|
8
|
+
* 1. Repository interfaces — interfaces named XRepository/XRepo/XStore/XGateway
|
|
9
|
+
* or interfaces containing findByX / save / delete methods
|
|
10
|
+
* 2. Repository implementations — classes implementing a XRepository interface
|
|
11
|
+
* 3. CQRS handlers — classes with execute/handle/apply methods taking XCommand/XQuery
|
|
12
|
+
* 4. DDD service layer — classes in 'application'/'command'/'query'/'usecase' packages
|
|
13
|
+
* 5. Domain layer — classes in 'domain' package
|
|
14
|
+
* 6. Infrastructure layer — classes in 'infrastructure'/'persistence'/'adapter' packages
|
|
15
|
+
*
|
|
16
|
+
* RULE-SA01: directory name is used only as a tie-breaker, never as primary evidence
|
|
17
|
+
* RULE-SA03: @Service/@Repository absence does NOT prevent node creation
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.SpringDddDetector = void 0;
|
|
21
|
+
const types_1 = require("./types");
|
|
22
|
+
class SpringDddDetector {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.name = 'spring-ddd';
|
|
25
|
+
}
|
|
26
|
+
detect(fileContent, filePath) {
|
|
27
|
+
if (!filePath.endsWith('.java') && !filePath.endsWith('.kt'))
|
|
28
|
+
return [];
|
|
29
|
+
const nodes = [];
|
|
30
|
+
const lines = fileContent.split('\n');
|
|
31
|
+
// Infer DDD layer from package path (tie-breaker only — RULE-SA01)
|
|
32
|
+
const dddLayer = inferDddLayerFromPath(filePath);
|
|
33
|
+
// ── Detect repository interfaces ──────────────────────────────────────
|
|
34
|
+
const repoInterfaces = detectRepositoryInterfaces(fileContent, filePath);
|
|
35
|
+
for (const repo of repoInterfaces) {
|
|
36
|
+
nodes.push({
|
|
37
|
+
id: (0, types_1.makeNodeId)(filePath, 'ddd-repository-interface', repo.name, repo.line),
|
|
38
|
+
kind: 'ddd-repository-interface',
|
|
39
|
+
name: repo.name,
|
|
40
|
+
filePath,
|
|
41
|
+
line: repo.line,
|
|
42
|
+
dddLayer: dddLayer !== null && dddLayer !== void 0 ? dddLayer : 'domain',
|
|
43
|
+
resolution: 'resolved',
|
|
44
|
+
validationConstraints: { methods: repo.methods.join(',') },
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// ── Detect repository implementations ─────────────────────────────────
|
|
48
|
+
const repoImpls = detectRepositoryImplementations(fileContent, filePath);
|
|
49
|
+
for (const impl of repoImpls) {
|
|
50
|
+
nodes.push({
|
|
51
|
+
id: (0, types_1.makeNodeId)(filePath, 'ddd-repository-impl', impl.className, impl.line),
|
|
52
|
+
kind: 'ddd-repository-impl',
|
|
53
|
+
name: impl.className,
|
|
54
|
+
filePath,
|
|
55
|
+
line: impl.line,
|
|
56
|
+
dddLayer: dddLayer !== null && dddLayer !== void 0 ? dddLayer : 'infrastructure',
|
|
57
|
+
implementsInterface: impl.interfaceName,
|
|
58
|
+
resolution: impl.interfaceResolved ? 'resolved' : 'cross-file-unresolved',
|
|
59
|
+
diagnosticMessage: impl.interfaceResolved
|
|
60
|
+
? undefined
|
|
61
|
+
: `Interface '${impl.interfaceName}' may be defined in another file`,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// ── Detect CQRS handlers ───────────────────────────────────────────────
|
|
65
|
+
const cqrsHandlers = detectCqrsHandlers(fileContent, filePath);
|
|
66
|
+
for (const handler of cqrsHandlers) {
|
|
67
|
+
nodes.push({
|
|
68
|
+
id: (0, types_1.makeNodeId)(filePath, 'cqrs-handler', handler.className, handler.line),
|
|
69
|
+
kind: 'cqrs-handler',
|
|
70
|
+
name: handler.className,
|
|
71
|
+
filePath,
|
|
72
|
+
line: handler.line,
|
|
73
|
+
dddLayer: dddLayer !== null && dddLayer !== void 0 ? dddLayer : 'application',
|
|
74
|
+
cqrsHandlerType: handler.handlerType,
|
|
75
|
+
cqrsParameterType: handler.parameterType,
|
|
76
|
+
resolution: 'resolved',
|
|
77
|
+
validationConstraints: { handleMethod: handler.handleMethod },
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// ── Detect application service classes ────────────────────────────────
|
|
81
|
+
const serviceClasses = detectServiceClasses(lines, filePath, dddLayer);
|
|
82
|
+
nodes.push(...serviceClasses);
|
|
83
|
+
return nodes;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.SpringDddDetector = SpringDddDetector;
|
|
87
|
+
function detectRepositoryInterfaces(source, filePath) {
|
|
88
|
+
var _a, _b;
|
|
89
|
+
const results = [];
|
|
90
|
+
const lines = source.split('\n');
|
|
91
|
+
// Named interfaces: interface ArticleRepository / ArticleRepo / ArticleStore / ArticleGateway
|
|
92
|
+
const namedPattern = /(?:public\s+)?interface\s+(\w+(?:Repository|Repo|Store|Gateway))\b/;
|
|
93
|
+
let currentIface = null;
|
|
94
|
+
let braceDepth = 0;
|
|
95
|
+
for (let i = 0; i < lines.length; i++) {
|
|
96
|
+
const line = lines[i];
|
|
97
|
+
if (!currentIface) {
|
|
98
|
+
const m = line.match(namedPattern);
|
|
99
|
+
if (m) {
|
|
100
|
+
currentIface = { name: m[1], methods: [], line: i + 1 };
|
|
101
|
+
braceDepth = 0;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (currentIface) {
|
|
105
|
+
braceDepth += ((_a = line.match(/\{/g)) !== null && _a !== void 0 ? _a : []).length;
|
|
106
|
+
braceDepth -= ((_b = line.match(/\}/g)) !== null && _b !== void 0 ? _b : []).length;
|
|
107
|
+
const methodMatch = line.match(/\b(findBy\w+|find\w+|getBy\w+|save|saveAll|delete|deleteById|existsBy\w+|countBy\w+)\s*\(/);
|
|
108
|
+
if (methodMatch)
|
|
109
|
+
currentIface.methods.push(methodMatch[1]);
|
|
110
|
+
if (braceDepth <= 0) {
|
|
111
|
+
if (currentIface.methods.length > 0)
|
|
112
|
+
results.push(currentIface);
|
|
113
|
+
currentIface = null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Also detect generic interfaces that have at least 2 repository-style methods
|
|
118
|
+
const genericPattern = /(?:public\s+)?interface\s+(\w+)\b/g;
|
|
119
|
+
let gm;
|
|
120
|
+
while ((gm = genericPattern.exec(source)) !== null) {
|
|
121
|
+
const name = gm[1];
|
|
122
|
+
if (results.some((r) => r.name === name))
|
|
123
|
+
continue;
|
|
124
|
+
const startIdx = gm.index;
|
|
125
|
+
const braceStart = source.indexOf('{', startIdx);
|
|
126
|
+
if (braceStart < 0)
|
|
127
|
+
continue;
|
|
128
|
+
const body = extractBraceBody(source, braceStart);
|
|
129
|
+
const repoMethodPattern = /\b(findBy\w+|save|delete|deleteById)\s*\(/g;
|
|
130
|
+
const methods = [];
|
|
131
|
+
let rm;
|
|
132
|
+
while ((rm = repoMethodPattern.exec(body)) !== null)
|
|
133
|
+
methods.push(rm[1]);
|
|
134
|
+
if (methods.length >= 2) {
|
|
135
|
+
const lineNum = source.substring(0, startIdx).split('\n').length;
|
|
136
|
+
results.push({ name, methods, line: lineNum });
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return results;
|
|
140
|
+
}
|
|
141
|
+
function detectRepositoryImplementations(source, filePath) {
|
|
142
|
+
const results = [];
|
|
143
|
+
const implPattern = /class\s+(\w+)(?:\s+extends\s+\w+)?\s+implements\s+([\w,\s<>]+?)(?:\{|$)/gm;
|
|
144
|
+
let m;
|
|
145
|
+
while ((m = implPattern.exec(source)) !== null) {
|
|
146
|
+
const className = m[1];
|
|
147
|
+
const ifaceList = m[2];
|
|
148
|
+
// Look for *Repository/*Repo/*Store/*Gateway in the implements list
|
|
149
|
+
const repoIfaceMatch = ifaceList.match(/\b(\w+(?:Repository|Repo|Store|Gateway))\b/);
|
|
150
|
+
if (!repoIfaceMatch)
|
|
151
|
+
continue;
|
|
152
|
+
const lineNum = source.substring(0, m.index).split('\n').length;
|
|
153
|
+
results.push({
|
|
154
|
+
className,
|
|
155
|
+
interfaceName: repoIfaceMatch[1],
|
|
156
|
+
interfaceResolved: false, // cross-file resolution needed
|
|
157
|
+
line: lineNum,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return results;
|
|
161
|
+
}
|
|
162
|
+
function detectCqrsHandlers(source, filePath) {
|
|
163
|
+
const results = [];
|
|
164
|
+
const lines = source.split('\n');
|
|
165
|
+
// Pattern: public ReturnType execute/handle/apply(CreateArticleCommand cmd)
|
|
166
|
+
const handlerPattern = /(?:public\s+\S+\s+)?(execute|handle|apply)\s*\(\s*(\w+(Command|Query|Event))\s+\w+\s*\)/;
|
|
167
|
+
let currentClass = '';
|
|
168
|
+
for (let i = 0; i < lines.length; i++) {
|
|
169
|
+
const line = lines[i];
|
|
170
|
+
const classMatch = line.match(/class\s+(\w+)/);
|
|
171
|
+
if (classMatch)
|
|
172
|
+
currentClass = classMatch[1];
|
|
173
|
+
const handlerMatch = line.match(handlerPattern);
|
|
174
|
+
if (handlerMatch && currentClass) {
|
|
175
|
+
const handlerTypeSuffix = handlerMatch[3].toLowerCase();
|
|
176
|
+
results.push({
|
|
177
|
+
className: currentClass,
|
|
178
|
+
handlerType: handlerTypeSuffix,
|
|
179
|
+
handleMethod: handlerMatch[1],
|
|
180
|
+
parameterType: handlerMatch[2],
|
|
181
|
+
line: i + 1,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return results;
|
|
186
|
+
}
|
|
187
|
+
function detectServiceClasses(lines, filePath, dddLayer) {
|
|
188
|
+
const nodes = [];
|
|
189
|
+
let currentClass = '';
|
|
190
|
+
let currentClassLine = 0;
|
|
191
|
+
for (let i = 0; i < lines.length; i++) {
|
|
192
|
+
const line = lines[i];
|
|
193
|
+
// class ArticleCommandService / ArticleQueryService / ArticleApplicationService
|
|
194
|
+
const classMatch = line.match(/class\s+(\w+(?:CommandService|QueryService|ApplicationService|UseCase|Interactor))\b/);
|
|
195
|
+
if (classMatch) {
|
|
196
|
+
currentClass = classMatch[1];
|
|
197
|
+
currentClassLine = i + 1;
|
|
198
|
+
nodes.push({
|
|
199
|
+
id: (0, types_1.makeNodeId)(filePath, 'ddd-service', currentClass, currentClassLine),
|
|
200
|
+
kind: 'ddd-service',
|
|
201
|
+
name: currentClass,
|
|
202
|
+
filePath,
|
|
203
|
+
line: currentClassLine,
|
|
204
|
+
dddLayer: dddLayer !== null && dddLayer !== void 0 ? dddLayer : 'application',
|
|
205
|
+
resolution: 'resolved',
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return nodes;
|
|
210
|
+
}
|
|
211
|
+
function inferDddLayerFromPath(filePath) {
|
|
212
|
+
const normalized = filePath.replace(/\\/g, '/').toLowerCase();
|
|
213
|
+
if (normalized.includes('/domain/'))
|
|
214
|
+
return 'domain';
|
|
215
|
+
if (normalized.includes('/application/') ||
|
|
216
|
+
normalized.includes('/command/') ||
|
|
217
|
+
normalized.includes('/query/') ||
|
|
218
|
+
normalized.includes('/usecase/'))
|
|
219
|
+
return 'application';
|
|
220
|
+
if (normalized.includes('/infrastructure/') ||
|
|
221
|
+
normalized.includes('/persistence/') ||
|
|
222
|
+
normalized.includes('/adapter/'))
|
|
223
|
+
return 'infrastructure';
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
function extractBraceBody(source, openBrace) {
|
|
227
|
+
let depth = 1;
|
|
228
|
+
let i = openBrace + 1;
|
|
229
|
+
while (i < source.length && depth > 0) {
|
|
230
|
+
if (source[i] === '{')
|
|
231
|
+
depth++;
|
|
232
|
+
if (source[i] === '}')
|
|
233
|
+
depth--;
|
|
234
|
+
i++;
|
|
235
|
+
}
|
|
236
|
+
return source.substring(openBrace, i);
|
|
237
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for pipeline detectors (Feature 27).
|
|
3
|
+
*
|
|
4
|
+
* Detectors analyse raw file content (string) and return DetectedNode[]
|
|
5
|
+
* that the cross-file resolution pass consumes to build graph nodes.
|
|
6
|
+
*/
|
|
7
|
+
import type { SecurityClassification, NodeResolution, EndpointProtocol, DecoratorStack } from '../../ast/astTypes';
|
|
8
|
+
export type DetectedNodeKind = 'endpoint' | 'api-call' | 'route-prefix' | 'auth-guard' | 'auth-interceptor' | 'auth-middleware' | 'injectable-service' | 'ddd-service' | 'ddd-repository-interface' | 'ddd-repository-impl' | 'cqrs-handler' | 'model' | 'model-field' | 'validation-rule' | 'model-method' | 'model-hook' | 'response-schema' | 'vuex-action' | 'vuex-dispatch' | 'error-handler' | 'exception-branch' | 'router-mount' | 'middleware-chain' | 'blueprint-definition' | 'blueprint-registration' | 'parameter' | 'mybatis-mapper' | 'mybatis-query';
|
|
9
|
+
/**
|
|
10
|
+
* A node detected by a file-content detector.
|
|
11
|
+
*
|
|
12
|
+
* Detectors never emit endpoint nodes before url_prefix / router.use() prefix
|
|
13
|
+
* is resolved (RULE-SA02). When the URL depends on cross-file data that is not
|
|
14
|
+
* yet available the detector emits the node with `resolution: 'cross-file-unresolved'`.
|
|
15
|
+
*/
|
|
16
|
+
export interface DetectedNode {
|
|
17
|
+
/** Stable within a single scan — derived from filePath + kind + name + line */
|
|
18
|
+
id: string;
|
|
19
|
+
/** Kind of semantic construct this node represents */
|
|
20
|
+
kind: DetectedNodeKind;
|
|
21
|
+
/** Human-readable name of the construct (function name, class name, path, etc.) */
|
|
22
|
+
name: string;
|
|
23
|
+
/** Absolute path to the file that was scanned */
|
|
24
|
+
filePath: string;
|
|
25
|
+
/** 1-based line number of the primary token */
|
|
26
|
+
line?: number;
|
|
27
|
+
/** HTTP path as written in source — may be a prefix or a full path */
|
|
28
|
+
httpPath?: string;
|
|
29
|
+
/** HTTP methods for this endpoint */
|
|
30
|
+
httpMethods?: string[];
|
|
31
|
+
/** Transport protocol */
|
|
32
|
+
protocol?: EndpointProtocol;
|
|
33
|
+
/** Security classification when statically determinable */
|
|
34
|
+
security?: SecurityClassification;
|
|
35
|
+
/**
|
|
36
|
+
* Resolution status:
|
|
37
|
+
* - `resolved` — all required cross-file data is available
|
|
38
|
+
* - `cross-file-unresolved` — depends on data from another file not yet scanned
|
|
39
|
+
* - `partial` — some data resolved, some not
|
|
40
|
+
*/
|
|
41
|
+
resolution: NodeResolution;
|
|
42
|
+
/** Human-readable reason when resolution is not 'resolved' */
|
|
43
|
+
diagnosticMessage?: string;
|
|
44
|
+
/** All decorators / annotations associated with this node */
|
|
45
|
+
decoratorStack?: DecoratorStack;
|
|
46
|
+
/** Parameter name when kind is 'parameter' */
|
|
47
|
+
parameterName?: string;
|
|
48
|
+
/** Parameter location: 'query' | 'json' | 'headers' | 'path' */
|
|
49
|
+
parameterLocation?: string;
|
|
50
|
+
/** Whether the parameter is required */
|
|
51
|
+
required?: boolean;
|
|
52
|
+
/** Validation constraints (type, min, max, pattern, etc.) */
|
|
53
|
+
validationConstraints?: Record<string, string | number | boolean>;
|
|
54
|
+
/** For injectable-service nodes: the injected token/class name */
|
|
55
|
+
injectedClass?: string;
|
|
56
|
+
/** How injection was detected */
|
|
57
|
+
injectionStyle?: 'constructor' | 'inject-fn' | 'decorator' | 'property';
|
|
58
|
+
/** The url_prefix / mount path when kind is 'route-prefix' or 'router-mount' */
|
|
59
|
+
urlPrefix?: string;
|
|
60
|
+
/** Target module or variable being mounted */
|
|
61
|
+
targetModule?: string;
|
|
62
|
+
/** Linked model/class name for validation / method nodes */
|
|
63
|
+
modelName?: string;
|
|
64
|
+
/** For response-schema nodes: the HTTP status code */
|
|
65
|
+
responseStatusCode?: number;
|
|
66
|
+
/** DDD layer classification inferred from code (RULE-SA03) */
|
|
67
|
+
dddLayer?: 'domain' | 'application' | 'infrastructure' | 'adapter';
|
|
68
|
+
/** Interface name being implemented */
|
|
69
|
+
implementsInterface?: string;
|
|
70
|
+
/** CQRS handler type */
|
|
71
|
+
cqrsHandlerType?: 'command' | 'query' | 'event';
|
|
72
|
+
/** CQRS parameter type (e.g. 'CreateArticleCommand') */
|
|
73
|
+
cqrsParameterType?: string;
|
|
74
|
+
/** For error-handler / exception-branch nodes: the error name or type matched */
|
|
75
|
+
errorName?: string;
|
|
76
|
+
/** HTTP status code produced by this error branch */
|
|
77
|
+
errorStatusCode?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Common interface every detector must implement.
|
|
81
|
+
*/
|
|
82
|
+
export interface Detector {
|
|
83
|
+
/** Human-readable detector name */
|
|
84
|
+
readonly name: string;
|
|
85
|
+
/**
|
|
86
|
+
* Analyse the raw file content and return all detected nodes.
|
|
87
|
+
*
|
|
88
|
+
* Rules that apply to ALL detectors:
|
|
89
|
+
* - NEVER infer node type from directory name (RULE-SA01)
|
|
90
|
+
* - NEVER emit an endpoint node before url_prefix is resolved (RULE-SA02)
|
|
91
|
+
* - Flag unresolved nodes as `resolution: 'cross-file-unresolved'` — do NOT drop them
|
|
92
|
+
* - @jwt_optional → security.optional = true, NEVER security = 'public'
|
|
93
|
+
*/
|
|
94
|
+
detect(fileContent: string, filePath: string): DetectedNode[];
|
|
95
|
+
}
|
|
96
|
+
export declare function makeNodeId(filePath: string, kind: DetectedNodeKind, name: string, line?: number): string;
|
|
97
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/detectors/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAInH,MAAM,MAAM,gBAAgB,GAExB,UAAU,GACV,UAAU,GACV,cAAc,GAEd,YAAY,GACZ,kBAAkB,GAClB,iBAAiB,GAEjB,oBAAoB,GACpB,aAAa,GACb,0BAA0B,GAC1B,qBAAqB,GACrB,cAAc,GAEd,OAAO,GACP,aAAa,GACb,iBAAiB,GACjB,cAAc,GACd,YAAY,GACZ,iBAAiB,GAEjB,aAAa,GACb,eAAe,GAEf,eAAe,GACf,kBAAkB,GAElB,cAAc,GACd,kBAAkB,GAElB,sBAAsB,GACtB,wBAAwB,GAExB,WAAW,GAEX,gBAAgB,GAChB,eAAe,CAAC;AAIpB;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,IAAI,EAAE,gBAAgB,CAAC;IACvB,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IAId,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAI5B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAIlC;;;;;OAKG;IACH,UAAU,EAAE,cAAc,CAAC;IAC3B,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAI3B,6DAA6D;IAC7D,cAAc,CAAC,EAAE,cAAc,CAAC;IAIhC,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAIlE,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,cAAc,CAAC,EAAE,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;IAIxE,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IAItB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAI5B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACnE,uCAAuC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wBAAwB;IACxB,eAAe,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IAChD,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAI3B,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;;;;;OAQG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;CAC/D;AAID,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAIxG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared types for pipeline detectors (Feature 27).
|
|
4
|
+
*
|
|
5
|
+
* Detectors analyse raw file content (string) and return DetectedNode[]
|
|
6
|
+
* that the cross-file resolution pass consumes to build graph nodes.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.makeNodeId = makeNodeId;
|
|
10
|
+
// ─── Utility: deterministic node ID ──────────────────────────────────────────
|
|
11
|
+
function makeNodeId(filePath, kind, name, line) {
|
|
12
|
+
const safeFile = filePath.replace(/\\/g, '/');
|
|
13
|
+
const safeName = name.replace(/\s+/g, '_');
|
|
14
|
+
return `${safeFile}:${kind}:${safeName}${line != null ? `:${line}` : ''}`;
|
|
15
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/pipeline/graph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,aAAa,EACb,YAAY,EACZ,SAAS,EACV,MAAM,SAAS,CAAC;AAEjB,qBAAa,sBAAsB;IACjC,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,KAAK,CAAqC;IAIlD,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI9B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/pipeline/graph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,aAAa,EACb,YAAY,EACZ,SAAS,EACV,MAAM,SAAS,CAAC;AAEjB,qBAAa,sBAAsB;IACjC,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,KAAK,CAAqC;IAIlD,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI9B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,EAAE;IAIhD,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE;IAI9C,WAAW,IAAI,SAAS,EAAE;IAI1B,IAAI,SAAS,IAAI,MAAM,CAEtB;IAID,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI9B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B,mDAAmD;IACnD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAIzC,8CAA8C;IAC9C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAIvC,sEAAsE;IACtE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE;IAQ9D,wCAAwC;IACxC,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,EAAE;IAIhD,WAAW,IAAI,SAAS,EAAE;IAI1B,IAAI,SAAS,IAAI,MAAM,CAEtB;IAID;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE;IA4B5E;;;OAGG;IACH,iBAAiB,CACf,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,GACtB,OAAO;IAiCV;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,sBAAsB,GAAG,YAAY,EAAE;IAwCpD,cAAc,IAAI;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE;IAO5D,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE,GAAG,sBAAsB;IAajG,KAAK,IAAI,IAAI;CAId"}
|