api-tests-coverage 1.0.0
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 +703 -0
- package/config.yaml.example +227 -0
- package/dist/action/src/index.d.ts +2 -0
- package/dist/action/src/index.d.ts.map +1 -0
- package/dist/action/src/index.js +349 -0
- package/dist/action/src/prComment.d.ts +34 -0
- package/dist/action/src/prComment.d.ts.map +1 -0
- package/dist/action/src/prComment.js +146 -0
- package/dist/src/ast/astAnalysisOrchestrator.d.ts +36 -0
- package/dist/src/ast/astAnalysisOrchestrator.d.ts.map +1 -0
- package/dist/src/ast/astAnalysisOrchestrator.js +123 -0
- package/dist/src/ast/astTypes.d.ts +105 -0
- package/dist/src/ast/astTypes.d.ts.map +1 -0
- package/dist/src/ast/astTypes.js +9 -0
- package/dist/src/ast/languageAnalyzer.d.ts +46 -0
- package/dist/src/ast/languageAnalyzer.d.ts.map +1 -0
- package/dist/src/ast/languageAnalyzer.js +9 -0
- package/dist/src/ast/languageCapabilities.d.ts +24 -0
- package/dist/src/ast/languageCapabilities.d.ts.map +1 -0
- package/dist/src/ast/languageCapabilities.js +92 -0
- package/dist/src/ast/parseFile.d.ts +16 -0
- package/dist/src/ast/parseFile.d.ts.map +1 -0
- package/dist/src/ast/parseFile.js +65 -0
- package/dist/src/ast/parserRegistry.d.ts +39 -0
- package/dist/src/ast/parserRegistry.d.ts.map +1 -0
- package/dist/src/ast/parserRegistry.js +66 -0
- package/dist/src/buildSummary.d.ts +26 -0
- package/dist/src/buildSummary.d.ts.map +1 -0
- package/dist/src/buildSummary.js +193 -0
- package/dist/src/businessCoverage.d.ts +68 -0
- package/dist/src/businessCoverage.d.ts.map +1 -0
- package/dist/src/businessCoverage.js +290 -0
- package/dist/src/compatibilityCoverage.d.ts +83 -0
- package/dist/src/compatibilityCoverage.d.ts.map +1 -0
- package/dist/src/compatibilityCoverage.js +501 -0
- package/dist/src/config/defaultConfig.d.ts +9 -0
- package/dist/src/config/defaultConfig.d.ts.map +1 -0
- package/dist/src/config/defaultConfig.js +97 -0
- package/dist/src/config/index.d.ts +12 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +37 -0
- package/dist/src/config/loadConfig.d.ts +29 -0
- package/dist/src/config/loadConfig.d.ts.map +1 -0
- package/dist/src/config/loadConfig.js +135 -0
- package/dist/src/config/mergeConfig.d.ts +15 -0
- package/dist/src/config/mergeConfig.d.ts.map +1 -0
- package/dist/src/config/mergeConfig.js +57 -0
- package/dist/src/config/schema.d.ts +15 -0
- package/dist/src/config/schema.d.ts.map +1 -0
- package/dist/src/config/schema.js +30 -0
- package/dist/src/config/types.d.ts +175 -0
- package/dist/src/config/types.d.ts.map +1 -0
- package/dist/src/config/types.js +9 -0
- package/dist/src/config/validateConfig.d.ts +22 -0
- package/dist/src/config/validateConfig.d.ts.map +1 -0
- package/dist/src/config/validateConfig.js +171 -0
- package/dist/src/config.d.ts +168 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +204 -0
- package/dist/src/coverage/deep-analysis/callGraph.d.ts +67 -0
- package/dist/src/coverage/deep-analysis/callGraph.d.ts.map +1 -0
- package/dist/src/coverage/deep-analysis/callGraph.js +275 -0
- package/dist/src/coverage/deep-analysis/deepEndpointResolver.d.ts +23 -0
- package/dist/src/coverage/deep-analysis/deepEndpointResolver.d.ts.map +1 -0
- package/dist/src/coverage/deep-analysis/deepEndpointResolver.js +394 -0
- package/dist/src/coverage/deep-analysis/index.d.ts +17 -0
- package/dist/src/coverage/deep-analysis/index.d.ts.map +1 -0
- package/dist/src/coverage/deep-analysis/index.js +63 -0
- package/dist/src/coverage/deep-analysis/resolveAssertions.d.ts +60 -0
- package/dist/src/coverage/deep-analysis/resolveAssertions.d.ts.map +1 -0
- package/dist/src/coverage/deep-analysis/resolveAssertions.js +121 -0
- package/dist/src/coverage/deep-analysis/resolveConstants.d.ts +36 -0
- package/dist/src/coverage/deep-analysis/resolveConstants.d.ts.map +1 -0
- package/dist/src/coverage/deep-analysis/resolveConstants.js +92 -0
- package/dist/src/coverage/deep-analysis/resolveEnums.d.ts +55 -0
- package/dist/src/coverage/deep-analysis/resolveEnums.d.ts.map +1 -0
- package/dist/src/coverage/deep-analysis/resolveEnums.js +152 -0
- package/dist/src/coverage/deep-analysis/resolveMethodChains.d.ts +70 -0
- package/dist/src/coverage/deep-analysis/resolveMethodChains.d.ts.map +1 -0
- package/dist/src/coverage/deep-analysis/resolveMethodChains.js +152 -0
- package/dist/src/coverage/deep-analysis/resolvePaths.d.ts +80 -0
- package/dist/src/coverage/deep-analysis/resolvePaths.d.ts.map +1 -0
- package/dist/src/coverage/deep-analysis/resolvePaths.js +216 -0
- package/dist/src/coverage/deep-analysis/resolveRequestWrappers.d.ts +71 -0
- package/dist/src/coverage/deep-analysis/resolveRequestWrappers.d.ts.map +1 -0
- package/dist/src/coverage/deep-analysis/resolveRequestWrappers.js +226 -0
- package/dist/src/coverage/deep-analysis/symbolTable.d.ts +58 -0
- package/dist/src/coverage/deep-analysis/symbolTable.d.ts.map +1 -0
- package/dist/src/coverage/deep-analysis/symbolTable.js +230 -0
- package/dist/src/coverage/deep-analysis/types.d.ts +122 -0
- package/dist/src/coverage/deep-analysis/types.d.ts.map +1 -0
- package/dist/src/coverage/deep-analysis/types.js +21 -0
- package/dist/src/discovery/fileClassifier.d.ts +50 -0
- package/dist/src/discovery/fileClassifier.d.ts.map +1 -0
- package/dist/src/discovery/fileClassifier.js +238 -0
- package/dist/src/discovery/projectDiscovery.d.ts +66 -0
- package/dist/src/discovery/projectDiscovery.d.ts.map +1 -0
- package/dist/src/discovery/projectDiscovery.js +287 -0
- package/dist/src/endpointCoverage.d.ts +70 -0
- package/dist/src/endpointCoverage.d.ts.map +1 -0
- package/dist/src/endpointCoverage.js +381 -0
- package/dist/src/errorCoverage.d.ts +93 -0
- package/dist/src/errorCoverage.d.ts.map +1 -0
- package/dist/src/errorCoverage.js +698 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +1441 -0
- package/dist/src/inference/businessRuleInference.d.ts +63 -0
- package/dist/src/inference/businessRuleInference.d.ts.map +1 -0
- package/dist/src/inference/businessRuleInference.js +268 -0
- package/dist/src/inference/integrationFlowInference.d.ts +56 -0
- package/dist/src/inference/integrationFlowInference.d.ts.map +1 -0
- package/dist/src/inference/integrationFlowInference.js +266 -0
- package/dist/src/integrationCoverage.d.ts +72 -0
- package/dist/src/integrationCoverage.d.ts.map +1 -0
- package/dist/src/integrationCoverage.js +317 -0
- package/dist/src/intelligence/index.d.ts +20 -0
- package/dist/src/intelligence/index.d.ts.map +1 -0
- package/dist/src/intelligence/index.js +105 -0
- package/dist/src/intelligence/linkageEngine.d.ts +20 -0
- package/dist/src/intelligence/linkageEngine.d.ts.map +1 -0
- package/dist/src/intelligence/linkageEngine.js +522 -0
- package/dist/src/intelligence/markdownReporter.d.ts +12 -0
- package/dist/src/intelligence/markdownReporter.d.ts.map +1 -0
- package/dist/src/intelligence/markdownReporter.js +265 -0
- package/dist/src/intelligence/riskScoring.d.ts +53 -0
- package/dist/src/intelligence/riskScoring.d.ts.map +1 -0
- package/dist/src/intelligence/riskScoring.js +181 -0
- package/dist/src/intelligence/types.d.ts +121 -0
- package/dist/src/intelligence/types.d.ts.map +1 -0
- package/dist/src/intelligence/types.js +8 -0
- package/dist/src/languageDetection.d.ts +100 -0
- package/dist/src/languageDetection.d.ts.map +1 -0
- package/dist/src/languageDetection.js +349 -0
- package/dist/src/languages/java/index.d.ts +16 -0
- package/dist/src/languages/java/index.d.ts.map +1 -0
- package/dist/src/languages/java/index.js +103 -0
- package/dist/src/languages/java/parser.d.ts +7 -0
- package/dist/src/languages/java/parser.d.ts.map +1 -0
- package/dist/src/languages/java/parser.js +50 -0
- package/dist/src/languages/java/semanticBuilder.d.ts +21 -0
- package/dist/src/languages/java/semanticBuilder.d.ts.map +1 -0
- package/dist/src/languages/java/semanticBuilder.js +358 -0
- package/dist/src/languages/javascript/annotationExtractor.d.ts +20 -0
- package/dist/src/languages/javascript/annotationExtractor.d.ts.map +1 -0
- package/dist/src/languages/javascript/annotationExtractor.js +94 -0
- package/dist/src/languages/javascript/assertionResolver.d.ts +18 -0
- package/dist/src/languages/javascript/assertionResolver.d.ts.map +1 -0
- package/dist/src/languages/javascript/assertionResolver.js +150 -0
- package/dist/src/languages/javascript/callResolver.d.ts +23 -0
- package/dist/src/languages/javascript/callResolver.d.ts.map +1 -0
- package/dist/src/languages/javascript/callResolver.js +236 -0
- package/dist/src/languages/javascript/httpInteractionExtractor.d.ts +23 -0
- package/dist/src/languages/javascript/httpInteractionExtractor.d.ts.map +1 -0
- package/dist/src/languages/javascript/httpInteractionExtractor.js +205 -0
- package/dist/src/languages/javascript/index.d.ts +20 -0
- package/dist/src/languages/javascript/index.d.ts.map +1 -0
- package/dist/src/languages/javascript/index.js +136 -0
- package/dist/src/languages/javascript/parser.d.ts +14 -0
- package/dist/src/languages/javascript/parser.d.ts.map +1 -0
- package/dist/src/languages/javascript/parser.js +38 -0
- package/dist/src/languages/javascript/symbolResolver.d.ts +31 -0
- package/dist/src/languages/javascript/symbolResolver.d.ts.map +1 -0
- package/dist/src/languages/javascript/symbolResolver.js +183 -0
- package/dist/src/languages/kotlin/index.d.ts +16 -0
- package/dist/src/languages/kotlin/index.d.ts.map +1 -0
- package/dist/src/languages/kotlin/index.js +151 -0
- package/dist/src/languages/kotlin/parser.d.ts +11 -0
- package/dist/src/languages/kotlin/parser.d.ts.map +1 -0
- package/dist/src/languages/kotlin/parser.js +74 -0
- package/dist/src/languages/python/index.d.ts +15 -0
- package/dist/src/languages/python/index.d.ts.map +1 -0
- package/dist/src/languages/python/index.js +293 -0
- package/dist/src/languages/ruby/index.d.ts +15 -0
- package/dist/src/languages/ruby/index.d.ts.map +1 -0
- package/dist/src/languages/ruby/index.js +274 -0
- package/dist/src/languages/shared/treeSitterUtils.d.ts +43 -0
- package/dist/src/languages/shared/treeSitterUtils.d.ts.map +1 -0
- package/dist/src/languages/shared/treeSitterUtils.js +100 -0
- package/dist/src/languages/typescript/index.d.ts +14 -0
- package/dist/src/languages/typescript/index.d.ts.map +1 -0
- package/dist/src/languages/typescript/index.js +25 -0
- package/dist/src/lib/index.d.ts +228 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +486 -0
- package/dist/src/mcp/client/index.d.ts +37 -0
- package/dist/src/mcp/client/index.d.ts.map +1 -0
- package/dist/src/mcp/client/index.js +235 -0
- package/dist/src/mcp/config.d.ts +50 -0
- package/dist/src/mcp/config.d.ts.map +1 -0
- package/dist/src/mcp/config.js +125 -0
- package/dist/src/mcp/events.d.ts +24 -0
- package/dist/src/mcp/events.d.ts.map +1 -0
- package/dist/src/mcp/events.js +48 -0
- package/dist/src/mcp/fallback/index.d.ts +50 -0
- package/dist/src/mcp/fallback/index.d.ts.map +1 -0
- package/dist/src/mcp/fallback/index.js +216 -0
- package/dist/src/mcp/index.d.ts +67 -0
- package/dist/src/mcp/index.d.ts.map +1 -0
- package/dist/src/mcp/index.js +212 -0
- package/dist/src/mcp/normalizer.d.ts +21 -0
- package/dist/src/mcp/normalizer.d.ts.map +1 -0
- package/dist/src/mcp/normalizer.js +99 -0
- package/dist/src/mcp/prompts/index.d.ts +86 -0
- package/dist/src/mcp/prompts/index.d.ts.map +1 -0
- package/dist/src/mcp/prompts/index.js +304 -0
- package/dist/src/mcp/templates/index.d.ts +35 -0
- package/dist/src/mcp/templates/index.d.ts.map +1 -0
- package/dist/src/mcp/templates/index.js +143 -0
- package/dist/src/mcp/testing/mock-server/index.d.ts +47 -0
- package/dist/src/mcp/testing/mock-server/index.d.ts.map +1 -0
- package/dist/src/mcp/testing/mock-server/index.js +157 -0
- package/dist/src/mcp/types.d.ts +127 -0
- package/dist/src/mcp/types.d.ts.map +1 -0
- package/dist/src/mcp/types.js +8 -0
- package/dist/src/observability.d.ts +138 -0
- package/dist/src/observability.d.ts.map +1 -0
- package/dist/src/observability.js +519 -0
- package/dist/src/parameterCoverage.d.ts +75 -0
- package/dist/src/parameterCoverage.d.ts.map +1 -0
- package/dist/src/parameterCoverage.js +629 -0
- package/dist/src/perfResilienceCoverage.d.ts +155 -0
- package/dist/src/perfResilienceCoverage.d.ts.map +1 -0
- package/dist/src/perfResilienceCoverage.js +670 -0
- package/dist/src/pluginLoader.d.ts +51 -0
- package/dist/src/pluginLoader.d.ts.map +1 -0
- package/dist/src/pluginLoader.js +72 -0
- package/dist/src/publishing.d.ts +63 -0
- package/dist/src/publishing.d.ts.map +1 -0
- package/dist/src/publishing.js +379 -0
- package/dist/src/qualityGate.d.ts +58 -0
- package/dist/src/qualityGate.d.ts.map +1 -0
- package/dist/src/qualityGate.js +118 -0
- package/dist/src/reporting.d.ts +41 -0
- package/dist/src/reporting.d.ts.map +1 -0
- package/dist/src/reporting.js +278 -0
- package/dist/src/screenshots.d.ts +71 -0
- package/dist/src/screenshots.d.ts.map +1 -0
- package/dist/src/screenshots.js +141 -0
- package/dist/src/security/gate/index.d.ts +11 -0
- package/dist/src/security/gate/index.d.ts.map +1 -0
- package/dist/src/security/gate/index.js +65 -0
- package/dist/src/security/index.d.ts +30 -0
- package/dist/src/security/index.d.ts.map +1 -0
- package/dist/src/security/index.js +342 -0
- package/dist/src/security/normalizers/semgrep.d.ts +10 -0
- package/dist/src/security/normalizers/semgrep.d.ts.map +1 -0
- package/dist/src/security/normalizers/semgrep.js +104 -0
- package/dist/src/security/normalizers/trivy.d.ts +10 -0
- package/dist/src/security/normalizers/trivy.d.ts.map +1 -0
- package/dist/src/security/normalizers/trivy.js +78 -0
- package/dist/src/security/normalizers/zap.d.ts +10 -0
- package/dist/src/security/normalizers/zap.d.ts.map +1 -0
- package/dist/src/security/normalizers/zap.js +104 -0
- package/dist/src/security/scanners/semgrep.d.ts +6 -0
- package/dist/src/security/scanners/semgrep.d.ts.map +1 -0
- package/dist/src/security/scanners/semgrep.js +125 -0
- package/dist/src/security/scanners/trivy.d.ts +6 -0
- package/dist/src/security/scanners/trivy.d.ts.map +1 -0
- package/dist/src/security/scanners/trivy.js +115 -0
- package/dist/src/security/scanners/zap.d.ts +6 -0
- package/dist/src/security/scanners/zap.d.ts.map +1 -0
- package/dist/src/security/scanners/zap.js +135 -0
- package/dist/src/security/types.d.ts +146 -0
- package/dist/src/security/types.d.ts.map +1 -0
- package/dist/src/security/types.js +6 -0
- package/dist/src/securityCoverage.d.ts +116 -0
- package/dist/src/securityCoverage.d.ts.map +1 -0
- package/dist/src/securityCoverage.js +725 -0
- package/dist/src/summary/buildSummary.d.ts +28 -0
- package/dist/src/summary/buildSummary.d.ts.map +1 -0
- package/dist/src/summary/buildSummary.js +257 -0
- package/dist/src/summary/evaluateMetrics.d.ts +31 -0
- package/dist/src/summary/evaluateMetrics.d.ts.map +1 -0
- package/dist/src/summary/evaluateMetrics.js +118 -0
- package/dist/src/summary/index.d.ts +10 -0
- package/dist/src/summary/index.d.ts.map +1 -0
- package/dist/src/summary/index.js +22 -0
- package/dist/src/summary/markdownRenderer.d.ts +139 -0
- package/dist/src/summary/markdownRenderer.d.ts.map +1 -0
- package/dist/src/summary/markdownRenderer.js +459 -0
- package/dist/src/summary/prSummary.d.ts +24 -0
- package/dist/src/summary/prSummary.d.ts.map +1 -0
- package/dist/src/summary/prSummary.js +233 -0
- package/dist/src/summary/summaryTypes.d.ts +35 -0
- package/dist/src/summary/summaryTypes.d.ts.map +1 -0
- package/dist/src/summary/summaryTypes.js +27 -0
- package/package.json +84 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Per-file AST analysis entry point.
|
|
4
|
+
*
|
|
5
|
+
* Attempts to parse and analyze a single source file using the registered
|
|
6
|
+
* LanguageAnalyzer for its language. Links assertions to HTTP interactions.
|
|
7
|
+
* Returns null when no analyzer is available or when parsing fails — the
|
|
8
|
+
* caller (astAnalysisOrchestrator) then falls back to regex analysis.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.analyzeFileWithAst = analyzeFileWithAst;
|
|
12
|
+
const parserRegistry_1 = require("./parserRegistry");
|
|
13
|
+
/**
|
|
14
|
+
* Parse and semantically analyze a single source file using the AST layer.
|
|
15
|
+
*
|
|
16
|
+
* @returns `ResolvedHttpInteraction[]` on success, `null` to signal fallback.
|
|
17
|
+
*/
|
|
18
|
+
function analyzeFileWithAst(filePath, content, language, context) {
|
|
19
|
+
const analyzer = (0, parserRegistry_1.getAnalyzer)(language, context.astConfig);
|
|
20
|
+
if (!analyzer)
|
|
21
|
+
return null;
|
|
22
|
+
try {
|
|
23
|
+
const parsed = analyzer.parse(filePath, content);
|
|
24
|
+
if (parsed.parseError)
|
|
25
|
+
return null;
|
|
26
|
+
const model = analyzer.buildSemanticModel(parsed, context);
|
|
27
|
+
const interactions = analyzer.extractHttpInteractions(model, context);
|
|
28
|
+
// Link assertions by matching response variable names
|
|
29
|
+
if (context.astConfig.assertionAware !== false) {
|
|
30
|
+
const assertions = analyzer.extractAssertions(model);
|
|
31
|
+
for (const interaction of interactions) {
|
|
32
|
+
if (interaction.responseVariable) {
|
|
33
|
+
const linked = assertions.find((a) => a.subjectVariable === interaction.responseVariable);
|
|
34
|
+
if (linked) {
|
|
35
|
+
interaction.assertionLinked = true;
|
|
36
|
+
interaction.assertionType = linked.assertionType;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Attach business rule refs if the analyzer supports it
|
|
42
|
+
if (analyzer.extractBusinessRuleRefs) {
|
|
43
|
+
const refs = analyzer.extractBusinessRuleRefs(model);
|
|
44
|
+
if (refs.length > 0) {
|
|
45
|
+
for (const interaction of interactions) {
|
|
46
|
+
interaction.businessRuleRefs = refs;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Attach flow refs if the analyzer supports it
|
|
51
|
+
if (analyzer.extractFlowRefs) {
|
|
52
|
+
const refs = analyzer.extractFlowRefs(model);
|
|
53
|
+
if (refs.length > 0) {
|
|
54
|
+
for (const interaction of interactions) {
|
|
55
|
+
interaction.flowRefs = refs;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return interactions;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Any unexpected error → signal fallback, never crash the analysis run
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language analyzer registry.
|
|
3
|
+
*
|
|
4
|
+
* Language modules self-register their analyzers by calling `registerAnalyzer()`
|
|
5
|
+
* on module load. The orchestrator retrieves them via `getAnalyzer()`, which
|
|
6
|
+
* respects per-language enable flags and handles native module load failures
|
|
7
|
+
* gracefully (returning undefined so the caller falls back to regex).
|
|
8
|
+
*/
|
|
9
|
+
import type { LanguageAnalyzer } from './languageAnalyzer';
|
|
10
|
+
import type { SupportedLanguage } from './astTypes';
|
|
11
|
+
import type { AstAnalysisConfig } from '../config/types';
|
|
12
|
+
type AnalyzerFactory = () => LanguageAnalyzer;
|
|
13
|
+
/**
|
|
14
|
+
* Register a language analyzer factory.
|
|
15
|
+
* Called once per language module via side-effect import at startup.
|
|
16
|
+
*/
|
|
17
|
+
export declare function registerAnalyzer(language: SupportedLanguage, factory: AnalyzerFactory): void;
|
|
18
|
+
/**
|
|
19
|
+
* Retrieve an instantiated analyzer for a given language.
|
|
20
|
+
*
|
|
21
|
+
* Returns `undefined` when:
|
|
22
|
+
* - AST is globally disabled (`astConfig.enabled === false`)
|
|
23
|
+
* - The specific language is disabled in per-language config
|
|
24
|
+
* - No analyzer has been registered for this language
|
|
25
|
+
* - The factory throws (e.g. native tree-sitter module failed to load)
|
|
26
|
+
*
|
|
27
|
+
* Callers treat `undefined` as "use regex fallback".
|
|
28
|
+
*/
|
|
29
|
+
export declare function getAnalyzer(language: SupportedLanguage, astConfig: AstAnalysisConfig): LanguageAnalyzer | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Check whether any analyzer is registered (for testing).
|
|
32
|
+
*/
|
|
33
|
+
export declare function hasAnalyzer(language: SupportedLanguage): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Return all registered language keys (for testing / introspection).
|
|
36
|
+
*/
|
|
37
|
+
export declare function registeredLanguages(): SupportedLanguage[];
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=parserRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parserRegistry.d.ts","sourceRoot":"","sources":["../../../src/ast/parserRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,KAAK,eAAe,GAAG,MAAM,gBAAgB,CAAC;AAI9C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAE5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,iBAAiB,GAC3B,gBAAgB,GAAG,SAAS,CAmB9B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAEhE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,iBAAiB,EAAE,CAEzD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Language analyzer registry.
|
|
4
|
+
*
|
|
5
|
+
* Language modules self-register their analyzers by calling `registerAnalyzer()`
|
|
6
|
+
* on module load. The orchestrator retrieves them via `getAnalyzer()`, which
|
|
7
|
+
* respects per-language enable flags and handles native module load failures
|
|
8
|
+
* gracefully (returning undefined so the caller falls back to regex).
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.registerAnalyzer = registerAnalyzer;
|
|
12
|
+
exports.getAnalyzer = getAnalyzer;
|
|
13
|
+
exports.hasAnalyzer = hasAnalyzer;
|
|
14
|
+
exports.registeredLanguages = registeredLanguages;
|
|
15
|
+
const registry = new Map();
|
|
16
|
+
/**
|
|
17
|
+
* Register a language analyzer factory.
|
|
18
|
+
* Called once per language module via side-effect import at startup.
|
|
19
|
+
*/
|
|
20
|
+
function registerAnalyzer(language, factory) {
|
|
21
|
+
registry.set(language, factory);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Retrieve an instantiated analyzer for a given language.
|
|
25
|
+
*
|
|
26
|
+
* Returns `undefined` when:
|
|
27
|
+
* - AST is globally disabled (`astConfig.enabled === false`)
|
|
28
|
+
* - The specific language is disabled in per-language config
|
|
29
|
+
* - No analyzer has been registered for this language
|
|
30
|
+
* - The factory throws (e.g. native tree-sitter module failed to load)
|
|
31
|
+
*
|
|
32
|
+
* Callers treat `undefined` as "use regex fallback".
|
|
33
|
+
*/
|
|
34
|
+
function getAnalyzer(language, astConfig) {
|
|
35
|
+
var _a;
|
|
36
|
+
if (astConfig.enabled === false)
|
|
37
|
+
return undefined;
|
|
38
|
+
const normalizedLang = language === 'auto' ? undefined : language;
|
|
39
|
+
if (!normalizedLang)
|
|
40
|
+
return undefined;
|
|
41
|
+
const langConfig = (_a = astConfig.languages) === null || _a === void 0 ? void 0 : _a[normalizedLang];
|
|
42
|
+
if ((langConfig === null || langConfig === void 0 ? void 0 : langConfig.enabled) === false)
|
|
43
|
+
return undefined;
|
|
44
|
+
const factory = registry.get(normalizedLang);
|
|
45
|
+
if (!factory)
|
|
46
|
+
return undefined;
|
|
47
|
+
try {
|
|
48
|
+
return factory();
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Native module (tree-sitter grammar) failed to load — signal fallback
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Check whether any analyzer is registered (for testing).
|
|
57
|
+
*/
|
|
58
|
+
function hasAnalyzer(language) {
|
|
59
|
+
return registry.has(language);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Return all registered language keys (for testing / introspection).
|
|
63
|
+
*/
|
|
64
|
+
function registeredLanguages() {
|
|
65
|
+
return Array.from(registry.keys());
|
|
66
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CoverageResult } from './reporting';
|
|
2
|
+
import type { QualityGateResult } from './qualityGate';
|
|
3
|
+
import type { BuildMetadata } from './publishing';
|
|
4
|
+
/**
|
|
5
|
+
* Generate a Markdown string suitable for the GitHub Actions step summary
|
|
6
|
+
* ($GITHUB_STEP_SUMMARY).
|
|
7
|
+
*/
|
|
8
|
+
export declare function generateStepSummary(results: CoverageResult[], qualityGate: QualityGateResult, metadata: BuildMetadata, pagesUrl?: string, artifactsUrl?: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Write the step summary to `$GITHUB_STEP_SUMMARY` if that environment
|
|
11
|
+
* variable is set (i.e. we are running inside GitHub Actions).
|
|
12
|
+
*
|
|
13
|
+
* @returns `true` if the summary was written, `false` otherwise.
|
|
14
|
+
*/
|
|
15
|
+
export declare function writeStepSummary(summary: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Generate a concise markdown string suitable for a PR comment.
|
|
18
|
+
* This is a shorter version of the step summary.
|
|
19
|
+
*/
|
|
20
|
+
export declare function generatePrComment(results: CoverageResult[], qualityGate: QualityGateResult, metadata: BuildMetadata, pagesUrl?: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Print a concise, human-readable summary to stdout.
|
|
23
|
+
* This is always called regardless of pass/fail.
|
|
24
|
+
*/
|
|
25
|
+
export declare function printCiSummary(results: CoverageResult[], qualityGate: QualityGateResult): void;
|
|
26
|
+
//# sourceMappingURL=buildSummary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildSummary.d.ts","sourceRoot":"","sources":["../../src/buildSummary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EAAE,EACzB,WAAW,EAAE,iBAAiB,EAC9B,QAAQ,EAAE,aAAa,EACvB,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAkFR;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAUzD;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EAAE,EACzB,WAAW,EAAE,iBAAiB,EAC9B,QAAQ,EAAE,aAAa,EACvB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAiCR;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EAAE,EACzB,WAAW,EAAE,iBAAiB,GAC7B,IAAI,CAoBN"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateStepSummary = generateStepSummary;
|
|
37
|
+
exports.writeStepSummary = writeStepSummary;
|
|
38
|
+
exports.generatePrComment = generatePrComment;
|
|
39
|
+
exports.printCiSummary = printCiSummary;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
// ─── GitHub Actions Step Summary ─────────────────────────────────────────────
|
|
42
|
+
/**
|
|
43
|
+
* Generate a Markdown string suitable for the GitHub Actions step summary
|
|
44
|
+
* ($GITHUB_STEP_SUMMARY).
|
|
45
|
+
*/
|
|
46
|
+
function generateStepSummary(results, qualityGate, metadata, pagesUrl, artifactsUrl) {
|
|
47
|
+
var _a, _b;
|
|
48
|
+
const statusEmoji = metadata.passed ? '✅' : '❌';
|
|
49
|
+
const lines = [
|
|
50
|
+
`## ${statusEmoji} API Coverage Report — ${metadata.passed ? 'PASSED' : 'FAILED'}`,
|
|
51
|
+
'',
|
|
52
|
+
`| | |`,
|
|
53
|
+
`|---|---|`,
|
|
54
|
+
`| **Project** | ${metadata.projectName} |`,
|
|
55
|
+
`| **Branch** | ${(_a = metadata.branch) !== null && _a !== void 0 ? _a : 'N/A'} |`,
|
|
56
|
+
`| **Commit** | \`${(_b = metadata.commitSha) !== null && _b !== void 0 ? _b : 'N/A'}\` |`,
|
|
57
|
+
`| **Build ID** | \`${metadata.buildId}\` |`,
|
|
58
|
+
`| **Timestamp** | ${metadata.buildTimestamp} |`,
|
|
59
|
+
'',
|
|
60
|
+
'### Coverage Summary',
|
|
61
|
+
'',
|
|
62
|
+
'| Category | Total | Covered | Coverage | Status |',
|
|
63
|
+
'|---|---|---|---|---|',
|
|
64
|
+
];
|
|
65
|
+
for (const r of results) {
|
|
66
|
+
const pct = r.coveragePercent.toFixed(2);
|
|
67
|
+
const failed = qualityGate.failures.some((f) => f.category === r.type);
|
|
68
|
+
const status = failed ? '❌ Below threshold' : r.coveragePercent === 0 ? '⚠️ No coverage' : '✅ Pass';
|
|
69
|
+
lines.push(`| ${r.type} | ${r.totalItems} | ${r.coveredItems} | ${pct}% | ${status} |`);
|
|
70
|
+
}
|
|
71
|
+
lines.push('');
|
|
72
|
+
lines.push('### Quality Gate');
|
|
73
|
+
lines.push('');
|
|
74
|
+
if (qualityGate.failures.length === 0) {
|
|
75
|
+
lines.push('✅ All coverage thresholds met.');
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
lines.push(`❌ **${qualityGate.failures.length} threshold(s) not met:**`);
|
|
79
|
+
lines.push('');
|
|
80
|
+
for (const f of qualityGate.failures) {
|
|
81
|
+
lines.push(`- **${f.category}**: expected ≥ ${f.expected}%, actual ${f.actual}%, gap **${f.gap}%**`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Top 5 coverage gaps
|
|
85
|
+
const top5Gaps = results
|
|
86
|
+
.filter((r) => r.coveragePercent < 100)
|
|
87
|
+
.sort((a, b) => a.coveragePercent - b.coveragePercent)
|
|
88
|
+
.slice(0, 5);
|
|
89
|
+
if (top5Gaps.length > 0) {
|
|
90
|
+
lines.push('');
|
|
91
|
+
lines.push('### Top Coverage Gaps');
|
|
92
|
+
lines.push('');
|
|
93
|
+
for (const g of top5Gaps) {
|
|
94
|
+
const missing = g.totalItems - g.coveredItems;
|
|
95
|
+
lines.push(`- **${g.type}**: ${missing} item(s) not covered (${g.coveragePercent.toFixed(2)}%)`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (pagesUrl) {
|
|
99
|
+
lines.push('');
|
|
100
|
+
lines.push(`📊 **[View Full Report on GitHub Pages](${pagesUrl})**`);
|
|
101
|
+
}
|
|
102
|
+
if (artifactsUrl) {
|
|
103
|
+
lines.push('');
|
|
104
|
+
lines.push(`📦 **[Download Artifacts](${artifactsUrl})**`);
|
|
105
|
+
}
|
|
106
|
+
lines.push('');
|
|
107
|
+
lines.push('### Recommended Next Action');
|
|
108
|
+
lines.push('');
|
|
109
|
+
if (qualityGate.failures.length > 0) {
|
|
110
|
+
const worstFailure = [...qualityGate.failures].sort((a, b) => b.gap - a.gap)[0];
|
|
111
|
+
if (worstFailure) {
|
|
112
|
+
lines.push(`Increase **${worstFailure.category}** coverage by at least ${worstFailure.gap}% ` +
|
|
113
|
+
`(currently ${worstFailure.actual}%, required ${worstFailure.expected}%).`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
lines.push('All thresholds met. Consider raising thresholds to enforce higher coverage standards.');
|
|
118
|
+
}
|
|
119
|
+
return lines.join('\n');
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Write the step summary to `$GITHUB_STEP_SUMMARY` if that environment
|
|
123
|
+
* variable is set (i.e. we are running inside GitHub Actions).
|
|
124
|
+
*
|
|
125
|
+
* @returns `true` if the summary was written, `false` otherwise.
|
|
126
|
+
*/
|
|
127
|
+
function writeStepSummary(summary) {
|
|
128
|
+
const summaryFile = process.env['GITHUB_STEP_SUMMARY'];
|
|
129
|
+
if (!summaryFile)
|
|
130
|
+
return false;
|
|
131
|
+
try {
|
|
132
|
+
fs.appendFileSync(summaryFile, summary + '\n');
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// ─── PR Annotation / Comment ──────────────────────────────────────────────────
|
|
140
|
+
/**
|
|
141
|
+
* Generate a concise markdown string suitable for a PR comment.
|
|
142
|
+
* This is a shorter version of the step summary.
|
|
143
|
+
*/
|
|
144
|
+
function generatePrComment(results, qualityGate, metadata, pagesUrl) {
|
|
145
|
+
const statusEmoji = metadata.passed ? '✅' : '❌';
|
|
146
|
+
const header = `${statusEmoji} **API Coverage: ${metadata.passed ? 'PASSED' : 'FAILED'}** — Build \`${metadata.buildId}\``;
|
|
147
|
+
const tableRows = results.map((r) => {
|
|
148
|
+
const pct = r.coveragePercent.toFixed(2);
|
|
149
|
+
const failed = qualityGate.failures.some((f) => f.category === r.type);
|
|
150
|
+
const icon = failed ? '❌' : r.coveragePercent === 0 ? '⚠️' : '✅';
|
|
151
|
+
return `| ${r.type} | ${pct}% | ${icon} |`;
|
|
152
|
+
});
|
|
153
|
+
const lines = [
|
|
154
|
+
header,
|
|
155
|
+
'',
|
|
156
|
+
'| Category | Coverage | Status |',
|
|
157
|
+
'|---|---|---|',
|
|
158
|
+
...tableRows,
|
|
159
|
+
'',
|
|
160
|
+
];
|
|
161
|
+
if (qualityGate.failures.length > 0) {
|
|
162
|
+
lines.push('**Failures:**');
|
|
163
|
+
for (const f of qualityGate.failures) {
|
|
164
|
+
lines.push(`- ${f.category}: ${f.actual}% < ${f.expected}% (gap: ${f.gap}%)`);
|
|
165
|
+
}
|
|
166
|
+
lines.push('');
|
|
167
|
+
}
|
|
168
|
+
if (pagesUrl) {
|
|
169
|
+
lines.push(`[View full report](${pagesUrl})`);
|
|
170
|
+
}
|
|
171
|
+
return lines.join('\n');
|
|
172
|
+
}
|
|
173
|
+
// ─── CI output summary ────────────────────────────────────────────────────────
|
|
174
|
+
/**
|
|
175
|
+
* Print a concise, human-readable summary to stdout.
|
|
176
|
+
* This is always called regardless of pass/fail.
|
|
177
|
+
*/
|
|
178
|
+
function printCiSummary(results, qualityGate) {
|
|
179
|
+
const status = qualityGate.passed ? '✅ PASSED' : '❌ FAILED';
|
|
180
|
+
console.log(`\n=== API Coverage Quality Gate: ${status} ===\n`);
|
|
181
|
+
for (const r of results) {
|
|
182
|
+
const failed = qualityGate.failures.some((f) => f.category === r.type);
|
|
183
|
+
const indicator = failed ? '❌' : '✅';
|
|
184
|
+
console.log(` ${indicator} ${r.type.padEnd(20)} ${String(r.coveredItems).padStart(4)}/${String(r.totalItems).padEnd(4)} (${r.coveragePercent.toFixed(2)}%)`);
|
|
185
|
+
}
|
|
186
|
+
if (qualityGate.failures.length > 0) {
|
|
187
|
+
console.log('\nThreshold failures:');
|
|
188
|
+
for (const f of qualityGate.failures) {
|
|
189
|
+
console.log(` ❌ ${f.category}: expected ≥ ${f.expected}%, actual ${f.actual}%, gap ${f.gap}%`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
console.log('');
|
|
193
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export interface BusinessRuleScenario {
|
|
2
|
+
/** Unique scenario ID, e.g. "BL001-success" */
|
|
3
|
+
id: string;
|
|
4
|
+
/** Human-readable description of this scenario */
|
|
5
|
+
description: string;
|
|
6
|
+
/** Keywords used to detect this scenario in test names/content */
|
|
7
|
+
keywords?: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface BusinessRule {
|
|
10
|
+
/** Unique rule ID, e.g. "BL001" */
|
|
11
|
+
id: string;
|
|
12
|
+
/** Human-readable description of the business rule */
|
|
13
|
+
description: string;
|
|
14
|
+
/** API endpoints involved in this rule, e.g. ["POST /users"] */
|
|
15
|
+
endpoints?: string[];
|
|
16
|
+
/**
|
|
17
|
+
* Keywords used to detect this rule in test names/content.
|
|
18
|
+
* A test is mapped to a rule when any keyword appears in its description.
|
|
19
|
+
*/
|
|
20
|
+
keywords: string[];
|
|
21
|
+
/** Optional list of sub-scenarios (success path, failure path, etc.) */
|
|
22
|
+
scenarios?: BusinessRuleScenario[];
|
|
23
|
+
}
|
|
24
|
+
export interface BusinessRulesFile {
|
|
25
|
+
rules: BusinessRule[];
|
|
26
|
+
}
|
|
27
|
+
export interface ScenarioCoverage {
|
|
28
|
+
scenario: BusinessRuleScenario;
|
|
29
|
+
covered: boolean;
|
|
30
|
+
matchedTests: string[];
|
|
31
|
+
}
|
|
32
|
+
export interface BusinessRuleCoverage {
|
|
33
|
+
rule: BusinessRule;
|
|
34
|
+
/** True if at least one test maps to this rule */
|
|
35
|
+
covered: boolean;
|
|
36
|
+
/** Test file paths that contain at least one matching test */
|
|
37
|
+
testFiles: string[];
|
|
38
|
+
/** Test description strings that matched the rule */
|
|
39
|
+
matchedTests: string[];
|
|
40
|
+
/** Coverage for each defined scenario */
|
|
41
|
+
scenarios: ScenarioCoverage[];
|
|
42
|
+
}
|
|
43
|
+
export interface BusinessCoverageReport {
|
|
44
|
+
total: number;
|
|
45
|
+
covered: number;
|
|
46
|
+
percentage: number;
|
|
47
|
+
uncoveredRules: BusinessRule[];
|
|
48
|
+
rules: BusinessRuleCoverage[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Parse a YAML or JSON business-rules definition file.
|
|
52
|
+
* The file must contain a top-level `rules` array.
|
|
53
|
+
*/
|
|
54
|
+
export declare function parseBusinessRules(rulesPath: string): BusinessRule[];
|
|
55
|
+
/**
|
|
56
|
+
* Analyse test files matching the given glob pattern and determine which
|
|
57
|
+
* business rules are covered.
|
|
58
|
+
*/
|
|
59
|
+
export declare function analyzeBusinessCoverage(rules: BusinessRule[], testGlob: string): Promise<BusinessRuleCoverage[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Build the coverage summary from a list of per-rule coverages.
|
|
62
|
+
*/
|
|
63
|
+
export declare function buildBusinessCoverageReport(coverages: BusinessRuleCoverage[]): BusinessCoverageReport;
|
|
64
|
+
/**
|
|
65
|
+
* Write JSON and HTML business-coverage reports to the given directory.
|
|
66
|
+
*/
|
|
67
|
+
export declare function generateBusinessReports(report: BusinessCoverageReport, reportsDir: string): void;
|
|
68
|
+
//# sourceMappingURL=businessCoverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"businessCoverage.d.ts","sourceRoot":"","sources":["../../src/businessCoverage.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;OAGG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,wEAAwE;IACxE,SAAS,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,YAAY,CAAC;IACnB,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,qDAAqD;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,yCAAyC;IACzC,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,KAAK,EAAE,oBAAoB,EAAE,CAAC;CAC/B;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAuBpE;AAmED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,YAAY,EAAE,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAyDjC;AAID;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,oBAAoB,EAAE,GAChC,sBAAsB,CAOxB;AAID;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,sBAAsB,EAC9B,UAAU,EAAE,MAAM,GACjB,IAAI,CAgHN"}
|