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.
Files changed (288) hide show
  1. package/README.md +703 -0
  2. package/config.yaml.example +227 -0
  3. package/dist/action/src/index.d.ts +2 -0
  4. package/dist/action/src/index.d.ts.map +1 -0
  5. package/dist/action/src/index.js +349 -0
  6. package/dist/action/src/prComment.d.ts +34 -0
  7. package/dist/action/src/prComment.d.ts.map +1 -0
  8. package/dist/action/src/prComment.js +146 -0
  9. package/dist/src/ast/astAnalysisOrchestrator.d.ts +36 -0
  10. package/dist/src/ast/astAnalysisOrchestrator.d.ts.map +1 -0
  11. package/dist/src/ast/astAnalysisOrchestrator.js +123 -0
  12. package/dist/src/ast/astTypes.d.ts +105 -0
  13. package/dist/src/ast/astTypes.d.ts.map +1 -0
  14. package/dist/src/ast/astTypes.js +9 -0
  15. package/dist/src/ast/languageAnalyzer.d.ts +46 -0
  16. package/dist/src/ast/languageAnalyzer.d.ts.map +1 -0
  17. package/dist/src/ast/languageAnalyzer.js +9 -0
  18. package/dist/src/ast/languageCapabilities.d.ts +24 -0
  19. package/dist/src/ast/languageCapabilities.d.ts.map +1 -0
  20. package/dist/src/ast/languageCapabilities.js +92 -0
  21. package/dist/src/ast/parseFile.d.ts +16 -0
  22. package/dist/src/ast/parseFile.d.ts.map +1 -0
  23. package/dist/src/ast/parseFile.js +65 -0
  24. package/dist/src/ast/parserRegistry.d.ts +39 -0
  25. package/dist/src/ast/parserRegistry.d.ts.map +1 -0
  26. package/dist/src/ast/parserRegistry.js +66 -0
  27. package/dist/src/buildSummary.d.ts +26 -0
  28. package/dist/src/buildSummary.d.ts.map +1 -0
  29. package/dist/src/buildSummary.js +193 -0
  30. package/dist/src/businessCoverage.d.ts +68 -0
  31. package/dist/src/businessCoverage.d.ts.map +1 -0
  32. package/dist/src/businessCoverage.js +290 -0
  33. package/dist/src/compatibilityCoverage.d.ts +83 -0
  34. package/dist/src/compatibilityCoverage.d.ts.map +1 -0
  35. package/dist/src/compatibilityCoverage.js +501 -0
  36. package/dist/src/config/defaultConfig.d.ts +9 -0
  37. package/dist/src/config/defaultConfig.d.ts.map +1 -0
  38. package/dist/src/config/defaultConfig.js +97 -0
  39. package/dist/src/config/index.d.ts +12 -0
  40. package/dist/src/config/index.d.ts.map +1 -0
  41. package/dist/src/config/index.js +37 -0
  42. package/dist/src/config/loadConfig.d.ts +29 -0
  43. package/dist/src/config/loadConfig.d.ts.map +1 -0
  44. package/dist/src/config/loadConfig.js +135 -0
  45. package/dist/src/config/mergeConfig.d.ts +15 -0
  46. package/dist/src/config/mergeConfig.d.ts.map +1 -0
  47. package/dist/src/config/mergeConfig.js +57 -0
  48. package/dist/src/config/schema.d.ts +15 -0
  49. package/dist/src/config/schema.d.ts.map +1 -0
  50. package/dist/src/config/schema.js +30 -0
  51. package/dist/src/config/types.d.ts +175 -0
  52. package/dist/src/config/types.d.ts.map +1 -0
  53. package/dist/src/config/types.js +9 -0
  54. package/dist/src/config/validateConfig.d.ts +22 -0
  55. package/dist/src/config/validateConfig.d.ts.map +1 -0
  56. package/dist/src/config/validateConfig.js +171 -0
  57. package/dist/src/config.d.ts +168 -0
  58. package/dist/src/config.d.ts.map +1 -0
  59. package/dist/src/config.js +204 -0
  60. package/dist/src/coverage/deep-analysis/callGraph.d.ts +67 -0
  61. package/dist/src/coverage/deep-analysis/callGraph.d.ts.map +1 -0
  62. package/dist/src/coverage/deep-analysis/callGraph.js +275 -0
  63. package/dist/src/coverage/deep-analysis/deepEndpointResolver.d.ts +23 -0
  64. package/dist/src/coverage/deep-analysis/deepEndpointResolver.d.ts.map +1 -0
  65. package/dist/src/coverage/deep-analysis/deepEndpointResolver.js +394 -0
  66. package/dist/src/coverage/deep-analysis/index.d.ts +17 -0
  67. package/dist/src/coverage/deep-analysis/index.d.ts.map +1 -0
  68. package/dist/src/coverage/deep-analysis/index.js +63 -0
  69. package/dist/src/coverage/deep-analysis/resolveAssertions.d.ts +60 -0
  70. package/dist/src/coverage/deep-analysis/resolveAssertions.d.ts.map +1 -0
  71. package/dist/src/coverage/deep-analysis/resolveAssertions.js +121 -0
  72. package/dist/src/coverage/deep-analysis/resolveConstants.d.ts +36 -0
  73. package/dist/src/coverage/deep-analysis/resolveConstants.d.ts.map +1 -0
  74. package/dist/src/coverage/deep-analysis/resolveConstants.js +92 -0
  75. package/dist/src/coverage/deep-analysis/resolveEnums.d.ts +55 -0
  76. package/dist/src/coverage/deep-analysis/resolveEnums.d.ts.map +1 -0
  77. package/dist/src/coverage/deep-analysis/resolveEnums.js +152 -0
  78. package/dist/src/coverage/deep-analysis/resolveMethodChains.d.ts +70 -0
  79. package/dist/src/coverage/deep-analysis/resolveMethodChains.d.ts.map +1 -0
  80. package/dist/src/coverage/deep-analysis/resolveMethodChains.js +152 -0
  81. package/dist/src/coverage/deep-analysis/resolvePaths.d.ts +80 -0
  82. package/dist/src/coverage/deep-analysis/resolvePaths.d.ts.map +1 -0
  83. package/dist/src/coverage/deep-analysis/resolvePaths.js +216 -0
  84. package/dist/src/coverage/deep-analysis/resolveRequestWrappers.d.ts +71 -0
  85. package/dist/src/coverage/deep-analysis/resolveRequestWrappers.d.ts.map +1 -0
  86. package/dist/src/coverage/deep-analysis/resolveRequestWrappers.js +226 -0
  87. package/dist/src/coverage/deep-analysis/symbolTable.d.ts +58 -0
  88. package/dist/src/coverage/deep-analysis/symbolTable.d.ts.map +1 -0
  89. package/dist/src/coverage/deep-analysis/symbolTable.js +230 -0
  90. package/dist/src/coverage/deep-analysis/types.d.ts +122 -0
  91. package/dist/src/coverage/deep-analysis/types.d.ts.map +1 -0
  92. package/dist/src/coverage/deep-analysis/types.js +21 -0
  93. package/dist/src/discovery/fileClassifier.d.ts +50 -0
  94. package/dist/src/discovery/fileClassifier.d.ts.map +1 -0
  95. package/dist/src/discovery/fileClassifier.js +238 -0
  96. package/dist/src/discovery/projectDiscovery.d.ts +66 -0
  97. package/dist/src/discovery/projectDiscovery.d.ts.map +1 -0
  98. package/dist/src/discovery/projectDiscovery.js +287 -0
  99. package/dist/src/endpointCoverage.d.ts +70 -0
  100. package/dist/src/endpointCoverage.d.ts.map +1 -0
  101. package/dist/src/endpointCoverage.js +381 -0
  102. package/dist/src/errorCoverage.d.ts +93 -0
  103. package/dist/src/errorCoverage.d.ts.map +1 -0
  104. package/dist/src/errorCoverage.js +698 -0
  105. package/dist/src/index.d.ts +3 -0
  106. package/dist/src/index.d.ts.map +1 -0
  107. package/dist/src/index.js +1441 -0
  108. package/dist/src/inference/businessRuleInference.d.ts +63 -0
  109. package/dist/src/inference/businessRuleInference.d.ts.map +1 -0
  110. package/dist/src/inference/businessRuleInference.js +268 -0
  111. package/dist/src/inference/integrationFlowInference.d.ts +56 -0
  112. package/dist/src/inference/integrationFlowInference.d.ts.map +1 -0
  113. package/dist/src/inference/integrationFlowInference.js +266 -0
  114. package/dist/src/integrationCoverage.d.ts +72 -0
  115. package/dist/src/integrationCoverage.d.ts.map +1 -0
  116. package/dist/src/integrationCoverage.js +317 -0
  117. package/dist/src/intelligence/index.d.ts +20 -0
  118. package/dist/src/intelligence/index.d.ts.map +1 -0
  119. package/dist/src/intelligence/index.js +105 -0
  120. package/dist/src/intelligence/linkageEngine.d.ts +20 -0
  121. package/dist/src/intelligence/linkageEngine.d.ts.map +1 -0
  122. package/dist/src/intelligence/linkageEngine.js +522 -0
  123. package/dist/src/intelligence/markdownReporter.d.ts +12 -0
  124. package/dist/src/intelligence/markdownReporter.d.ts.map +1 -0
  125. package/dist/src/intelligence/markdownReporter.js +265 -0
  126. package/dist/src/intelligence/riskScoring.d.ts +53 -0
  127. package/dist/src/intelligence/riskScoring.d.ts.map +1 -0
  128. package/dist/src/intelligence/riskScoring.js +181 -0
  129. package/dist/src/intelligence/types.d.ts +121 -0
  130. package/dist/src/intelligence/types.d.ts.map +1 -0
  131. package/dist/src/intelligence/types.js +8 -0
  132. package/dist/src/languageDetection.d.ts +100 -0
  133. package/dist/src/languageDetection.d.ts.map +1 -0
  134. package/dist/src/languageDetection.js +349 -0
  135. package/dist/src/languages/java/index.d.ts +16 -0
  136. package/dist/src/languages/java/index.d.ts.map +1 -0
  137. package/dist/src/languages/java/index.js +103 -0
  138. package/dist/src/languages/java/parser.d.ts +7 -0
  139. package/dist/src/languages/java/parser.d.ts.map +1 -0
  140. package/dist/src/languages/java/parser.js +50 -0
  141. package/dist/src/languages/java/semanticBuilder.d.ts +21 -0
  142. package/dist/src/languages/java/semanticBuilder.d.ts.map +1 -0
  143. package/dist/src/languages/java/semanticBuilder.js +358 -0
  144. package/dist/src/languages/javascript/annotationExtractor.d.ts +20 -0
  145. package/dist/src/languages/javascript/annotationExtractor.d.ts.map +1 -0
  146. package/dist/src/languages/javascript/annotationExtractor.js +94 -0
  147. package/dist/src/languages/javascript/assertionResolver.d.ts +18 -0
  148. package/dist/src/languages/javascript/assertionResolver.d.ts.map +1 -0
  149. package/dist/src/languages/javascript/assertionResolver.js +150 -0
  150. package/dist/src/languages/javascript/callResolver.d.ts +23 -0
  151. package/dist/src/languages/javascript/callResolver.d.ts.map +1 -0
  152. package/dist/src/languages/javascript/callResolver.js +236 -0
  153. package/dist/src/languages/javascript/httpInteractionExtractor.d.ts +23 -0
  154. package/dist/src/languages/javascript/httpInteractionExtractor.d.ts.map +1 -0
  155. package/dist/src/languages/javascript/httpInteractionExtractor.js +205 -0
  156. package/dist/src/languages/javascript/index.d.ts +20 -0
  157. package/dist/src/languages/javascript/index.d.ts.map +1 -0
  158. package/dist/src/languages/javascript/index.js +136 -0
  159. package/dist/src/languages/javascript/parser.d.ts +14 -0
  160. package/dist/src/languages/javascript/parser.d.ts.map +1 -0
  161. package/dist/src/languages/javascript/parser.js +38 -0
  162. package/dist/src/languages/javascript/symbolResolver.d.ts +31 -0
  163. package/dist/src/languages/javascript/symbolResolver.d.ts.map +1 -0
  164. package/dist/src/languages/javascript/symbolResolver.js +183 -0
  165. package/dist/src/languages/kotlin/index.d.ts +16 -0
  166. package/dist/src/languages/kotlin/index.d.ts.map +1 -0
  167. package/dist/src/languages/kotlin/index.js +151 -0
  168. package/dist/src/languages/kotlin/parser.d.ts +11 -0
  169. package/dist/src/languages/kotlin/parser.d.ts.map +1 -0
  170. package/dist/src/languages/kotlin/parser.js +74 -0
  171. package/dist/src/languages/python/index.d.ts +15 -0
  172. package/dist/src/languages/python/index.d.ts.map +1 -0
  173. package/dist/src/languages/python/index.js +293 -0
  174. package/dist/src/languages/ruby/index.d.ts +15 -0
  175. package/dist/src/languages/ruby/index.d.ts.map +1 -0
  176. package/dist/src/languages/ruby/index.js +274 -0
  177. package/dist/src/languages/shared/treeSitterUtils.d.ts +43 -0
  178. package/dist/src/languages/shared/treeSitterUtils.d.ts.map +1 -0
  179. package/dist/src/languages/shared/treeSitterUtils.js +100 -0
  180. package/dist/src/languages/typescript/index.d.ts +14 -0
  181. package/dist/src/languages/typescript/index.d.ts.map +1 -0
  182. package/dist/src/languages/typescript/index.js +25 -0
  183. package/dist/src/lib/index.d.ts +228 -0
  184. package/dist/src/lib/index.d.ts.map +1 -0
  185. package/dist/src/lib/index.js +486 -0
  186. package/dist/src/mcp/client/index.d.ts +37 -0
  187. package/dist/src/mcp/client/index.d.ts.map +1 -0
  188. package/dist/src/mcp/client/index.js +235 -0
  189. package/dist/src/mcp/config.d.ts +50 -0
  190. package/dist/src/mcp/config.d.ts.map +1 -0
  191. package/dist/src/mcp/config.js +125 -0
  192. package/dist/src/mcp/events.d.ts +24 -0
  193. package/dist/src/mcp/events.d.ts.map +1 -0
  194. package/dist/src/mcp/events.js +48 -0
  195. package/dist/src/mcp/fallback/index.d.ts +50 -0
  196. package/dist/src/mcp/fallback/index.d.ts.map +1 -0
  197. package/dist/src/mcp/fallback/index.js +216 -0
  198. package/dist/src/mcp/index.d.ts +67 -0
  199. package/dist/src/mcp/index.d.ts.map +1 -0
  200. package/dist/src/mcp/index.js +212 -0
  201. package/dist/src/mcp/normalizer.d.ts +21 -0
  202. package/dist/src/mcp/normalizer.d.ts.map +1 -0
  203. package/dist/src/mcp/normalizer.js +99 -0
  204. package/dist/src/mcp/prompts/index.d.ts +86 -0
  205. package/dist/src/mcp/prompts/index.d.ts.map +1 -0
  206. package/dist/src/mcp/prompts/index.js +304 -0
  207. package/dist/src/mcp/templates/index.d.ts +35 -0
  208. package/dist/src/mcp/templates/index.d.ts.map +1 -0
  209. package/dist/src/mcp/templates/index.js +143 -0
  210. package/dist/src/mcp/testing/mock-server/index.d.ts +47 -0
  211. package/dist/src/mcp/testing/mock-server/index.d.ts.map +1 -0
  212. package/dist/src/mcp/testing/mock-server/index.js +157 -0
  213. package/dist/src/mcp/types.d.ts +127 -0
  214. package/dist/src/mcp/types.d.ts.map +1 -0
  215. package/dist/src/mcp/types.js +8 -0
  216. package/dist/src/observability.d.ts +138 -0
  217. package/dist/src/observability.d.ts.map +1 -0
  218. package/dist/src/observability.js +519 -0
  219. package/dist/src/parameterCoverage.d.ts +75 -0
  220. package/dist/src/parameterCoverage.d.ts.map +1 -0
  221. package/dist/src/parameterCoverage.js +629 -0
  222. package/dist/src/perfResilienceCoverage.d.ts +155 -0
  223. package/dist/src/perfResilienceCoverage.d.ts.map +1 -0
  224. package/dist/src/perfResilienceCoverage.js +670 -0
  225. package/dist/src/pluginLoader.d.ts +51 -0
  226. package/dist/src/pluginLoader.d.ts.map +1 -0
  227. package/dist/src/pluginLoader.js +72 -0
  228. package/dist/src/publishing.d.ts +63 -0
  229. package/dist/src/publishing.d.ts.map +1 -0
  230. package/dist/src/publishing.js +379 -0
  231. package/dist/src/qualityGate.d.ts +58 -0
  232. package/dist/src/qualityGate.d.ts.map +1 -0
  233. package/dist/src/qualityGate.js +118 -0
  234. package/dist/src/reporting.d.ts +41 -0
  235. package/dist/src/reporting.d.ts.map +1 -0
  236. package/dist/src/reporting.js +278 -0
  237. package/dist/src/screenshots.d.ts +71 -0
  238. package/dist/src/screenshots.d.ts.map +1 -0
  239. package/dist/src/screenshots.js +141 -0
  240. package/dist/src/security/gate/index.d.ts +11 -0
  241. package/dist/src/security/gate/index.d.ts.map +1 -0
  242. package/dist/src/security/gate/index.js +65 -0
  243. package/dist/src/security/index.d.ts +30 -0
  244. package/dist/src/security/index.d.ts.map +1 -0
  245. package/dist/src/security/index.js +342 -0
  246. package/dist/src/security/normalizers/semgrep.d.ts +10 -0
  247. package/dist/src/security/normalizers/semgrep.d.ts.map +1 -0
  248. package/dist/src/security/normalizers/semgrep.js +104 -0
  249. package/dist/src/security/normalizers/trivy.d.ts +10 -0
  250. package/dist/src/security/normalizers/trivy.d.ts.map +1 -0
  251. package/dist/src/security/normalizers/trivy.js +78 -0
  252. package/dist/src/security/normalizers/zap.d.ts +10 -0
  253. package/dist/src/security/normalizers/zap.d.ts.map +1 -0
  254. package/dist/src/security/normalizers/zap.js +104 -0
  255. package/dist/src/security/scanners/semgrep.d.ts +6 -0
  256. package/dist/src/security/scanners/semgrep.d.ts.map +1 -0
  257. package/dist/src/security/scanners/semgrep.js +125 -0
  258. package/dist/src/security/scanners/trivy.d.ts +6 -0
  259. package/dist/src/security/scanners/trivy.d.ts.map +1 -0
  260. package/dist/src/security/scanners/trivy.js +115 -0
  261. package/dist/src/security/scanners/zap.d.ts +6 -0
  262. package/dist/src/security/scanners/zap.d.ts.map +1 -0
  263. package/dist/src/security/scanners/zap.js +135 -0
  264. package/dist/src/security/types.d.ts +146 -0
  265. package/dist/src/security/types.d.ts.map +1 -0
  266. package/dist/src/security/types.js +6 -0
  267. package/dist/src/securityCoverage.d.ts +116 -0
  268. package/dist/src/securityCoverage.d.ts.map +1 -0
  269. package/dist/src/securityCoverage.js +725 -0
  270. package/dist/src/summary/buildSummary.d.ts +28 -0
  271. package/dist/src/summary/buildSummary.d.ts.map +1 -0
  272. package/dist/src/summary/buildSummary.js +257 -0
  273. package/dist/src/summary/evaluateMetrics.d.ts +31 -0
  274. package/dist/src/summary/evaluateMetrics.d.ts.map +1 -0
  275. package/dist/src/summary/evaluateMetrics.js +118 -0
  276. package/dist/src/summary/index.d.ts +10 -0
  277. package/dist/src/summary/index.d.ts.map +1 -0
  278. package/dist/src/summary/index.js +22 -0
  279. package/dist/src/summary/markdownRenderer.d.ts +139 -0
  280. package/dist/src/summary/markdownRenderer.d.ts.map +1 -0
  281. package/dist/src/summary/markdownRenderer.js +459 -0
  282. package/dist/src/summary/prSummary.d.ts +24 -0
  283. package/dist/src/summary/prSummary.d.ts.map +1 -0
  284. package/dist/src/summary/prSummary.js +233 -0
  285. package/dist/src/summary/summaryTypes.d.ts +35 -0
  286. package/dist/src/summary/summaryTypes.d.ts.map +1 -0
  287. package/dist/src/summary/summaryTypes.js +27 -0
  288. package/package.json +84 -0
@@ -0,0 +1,486 @@
1
+ "use strict";
2
+ /**
3
+ * api-test-coverage-analyzer – Public Library API
4
+ *
5
+ * Import individual analyze* functions in your own scripts:
6
+ *
7
+ * const { analyzeEndpoints } = require('api-test-coverage-analyzer');
8
+ * const results = await analyzeEndpoints({ spec: 'openapi.yaml', tests: 'tests/**\/*.ts' });
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.printCiSummary = exports.generatePrComment = exports.writeStepSummary = exports.generateStepSummary = exports.evaluateQualityGate = exports.checkThresholds = exports.parseFormats = exports.generatePrSummary = exports.generateBuildSummary = exports.renderRiskPrioritizationMd = exports.renderMissingTestsMd = exports.renderCoverageIntelligenceMd = exports.writeIntelligenceReports = exports.buildRecommendationFromFinding = exports.runLinkageEngine = exports.scoreToPriority = exports.scoreToRiskBand = exports.computeRiskScore = exports.runIntelligenceEngine = exports.recordIntelligenceMetrics = exports.recordSecurityScanMetrics = exports.normalizeZapOutput = exports.normalizeTrivyOutput = exports.normalizeSemgrepOutput = exports.evaluateSecurityGate = exports.generateSecurityScanReports = exports.buildSecurityScanSummary = exports.runSecurityScan = void 0;
45
+ exports.analyzeEndpoints = analyzeEndpoints;
46
+ exports.analyzeParameters = analyzeParameters;
47
+ exports.analyzeBusinessRules = analyzeBusinessRules;
48
+ exports.analyzeIntegrationFlows = analyzeIntegrationFlows;
49
+ exports.analyzeErrorHandling = analyzeErrorHandling;
50
+ exports.analyzeSecurityControls = analyzeSecurityControls;
51
+ exports.analyzePerfResilience = analyzePerfResilience;
52
+ exports.runSecurityAnalysis = runSecurityAnalysis;
53
+ exports.analyzeCompatibility = analyzeCompatibility;
54
+ exports.runAnalysisAndEnforceQualityGate = runAnalysisAndEnforceQualityGate;
55
+ var index_1 = require("../security/index");
56
+ Object.defineProperty(exports, "runSecurityScan", { enumerable: true, get: function () { return index_1.runSecurityScan; } });
57
+ Object.defineProperty(exports, "buildSecurityScanSummary", { enumerable: true, get: function () { return index_1.buildSecurityScanSummary; } });
58
+ Object.defineProperty(exports, "generateSecurityScanReports", { enumerable: true, get: function () { return index_1.generateSecurityScanReports; } });
59
+ Object.defineProperty(exports, "evaluateSecurityGate", { enumerable: true, get: function () { return index_1.evaluateSecurityGate; } });
60
+ Object.defineProperty(exports, "normalizeSemgrepOutput", { enumerable: true, get: function () { return index_1.normalizeSemgrepOutput; } });
61
+ Object.defineProperty(exports, "normalizeTrivyOutput", { enumerable: true, get: function () { return index_1.normalizeTrivyOutput; } });
62
+ Object.defineProperty(exports, "normalizeZapOutput", { enumerable: true, get: function () { return index_1.normalizeZapOutput; } });
63
+ var observability_1 = require("../observability");
64
+ Object.defineProperty(exports, "recordSecurityScanMetrics", { enumerable: true, get: function () { return observability_1.recordSecurityScanMetrics; } });
65
+ Object.defineProperty(exports, "recordIntelligenceMetrics", { enumerable: true, get: function () { return observability_1.recordIntelligenceMetrics; } });
66
+ var index_2 = require("../intelligence/index");
67
+ Object.defineProperty(exports, "runIntelligenceEngine", { enumerable: true, get: function () { return index_2.runIntelligenceEngine; } });
68
+ Object.defineProperty(exports, "computeRiskScore", { enumerable: true, get: function () { return index_2.computeRiskScore; } });
69
+ Object.defineProperty(exports, "scoreToRiskBand", { enumerable: true, get: function () { return index_2.scoreToRiskBand; } });
70
+ Object.defineProperty(exports, "scoreToPriority", { enumerable: true, get: function () { return index_2.scoreToPriority; } });
71
+ Object.defineProperty(exports, "runLinkageEngine", { enumerable: true, get: function () { return index_2.runLinkageEngine; } });
72
+ Object.defineProperty(exports, "buildRecommendationFromFinding", { enumerable: true, get: function () { return index_2.buildRecommendationFromFinding; } });
73
+ Object.defineProperty(exports, "writeIntelligenceReports", { enumerable: true, get: function () { return index_2.writeIntelligenceReports; } });
74
+ Object.defineProperty(exports, "renderCoverageIntelligenceMd", { enumerable: true, get: function () { return index_2.renderCoverageIntelligenceMd; } });
75
+ Object.defineProperty(exports, "renderMissingTestsMd", { enumerable: true, get: function () { return index_2.renderMissingTestsMd; } });
76
+ Object.defineProperty(exports, "renderRiskPrioritizationMd", { enumerable: true, get: function () { return index_2.renderRiskPrioritizationMd; } });
77
+ // Re-export summary engine
78
+ var index_3 = require("../summary/index");
79
+ Object.defineProperty(exports, "generateBuildSummary", { enumerable: true, get: function () { return index_3.generateBuildSummary; } });
80
+ Object.defineProperty(exports, "generatePrSummary", { enumerable: true, get: function () { return index_3.generatePrSummary; } });
81
+ const path = __importStar(require("path"));
82
+ const index_4 = require("../security/index");
83
+ const endpointCoverage_1 = require("../endpointCoverage");
84
+ const parameterCoverage_1 = require("../parameterCoverage");
85
+ const businessCoverage_1 = require("../businessCoverage");
86
+ const integrationCoverage_1 = require("../integrationCoverage");
87
+ const errorCoverage_1 = require("../errorCoverage");
88
+ const securityCoverage_1 = require("../securityCoverage");
89
+ const perfResilienceCoverage_1 = require("../perfResilienceCoverage");
90
+ const compatibilityCoverage_1 = require("../compatibilityCoverage");
91
+ const reporting_1 = require("../reporting");
92
+ Object.defineProperty(exports, "parseFormats", { enumerable: true, get: function () { return reporting_1.parseFormats; } });
93
+ Object.defineProperty(exports, "checkThresholds", { enumerable: true, get: function () { return reporting_1.checkThresholds; } });
94
+ const languageDetection_1 = require("../languageDetection");
95
+ const qualityGate_1 = require("../qualityGate");
96
+ Object.defineProperty(exports, "evaluateQualityGate", { enumerable: true, get: function () { return qualityGate_1.evaluateQualityGate; } });
97
+ const publishing_1 = require("../publishing");
98
+ const buildSummary_1 = require("../buildSummary");
99
+ Object.defineProperty(exports, "generateStepSummary", { enumerable: true, get: function () { return buildSummary_1.generateStepSummary; } });
100
+ Object.defineProperty(exports, "writeStepSummary", { enumerable: true, get: function () { return buildSummary_1.writeStepSummary; } });
101
+ Object.defineProperty(exports, "generatePrComment", { enumerable: true, get: function () { return buildSummary_1.generatePrComment; } });
102
+ Object.defineProperty(exports, "printCiSummary", { enumerable: true, get: function () { return buildSummary_1.printCiSummary; } });
103
+ const index_5 = require("../summary/index");
104
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
105
+ function resolveTestsGlob(tests) {
106
+ return Array.isArray(tests) ? tests[0] : tests;
107
+ }
108
+ function resolveReportsDir(opts) {
109
+ var _a;
110
+ return path.resolve((_a = opts.reportsDir) !== null && _a !== void 0 ? _a : 'reports');
111
+ }
112
+ // ─── Public API ───────────────────────────────────────────────────────────────
113
+ /**
114
+ * Analyse which API endpoints are covered by integration tests.
115
+ *
116
+ * @example
117
+ * const { analyzeEndpoints } = require('api-test-coverage-analyzer');
118
+ * const result = await analyzeEndpoints({ spec: 'openapi.yaml', tests: 'tests/**\/*.ts' });
119
+ */
120
+ async function analyzeEndpoints(options) {
121
+ var _a;
122
+ const specPath = path.resolve(options.spec);
123
+ const testsGlob = resolveTestsGlob(options.tests);
124
+ const reportsDir = resolveReportsDir(options);
125
+ const formats = (0, reporting_1.parseFormats)((_a = options.format) !== null && _a !== void 0 ? _a : 'json,html');
126
+ const languages = options.language
127
+ ? (0, languageDetection_1.parseLanguageOption)(Array.isArray(options.language) ? options.language.join(',') : options.language)
128
+ : ['auto'];
129
+ const endpoints = await (0, endpointCoverage_1.parseOpenApiSpec)(specPath);
130
+ const coverageMap = await (0, endpointCoverage_1.analyzeTestCoverage)(endpoints, testsGlob, languages);
131
+ const report = (0, endpointCoverage_1.buildCoverageReport)(coverageMap);
132
+ (0, endpointCoverage_1.generateReports)(report, reportsDir);
133
+ const result = {
134
+ type: 'endpoint',
135
+ totalItems: report.total,
136
+ coveredItems: report.covered,
137
+ coveragePercent: report.percentage,
138
+ details: report,
139
+ };
140
+ const thresholds = {};
141
+ if (options.thresholdEndpoint !== undefined && options.thresholdEndpoint > 0) {
142
+ thresholds['endpoint'] = options.thresholdEndpoint;
143
+ }
144
+ (0, reporting_1.generateMultiFormatReports)([result], formats, reportsDir, thresholds);
145
+ return result;
146
+ }
147
+ /**
148
+ * Analyse how thoroughly each API parameter is tested.
149
+ *
150
+ * @example
151
+ * const { analyzeParameters } = require('api-test-coverage-analyzer');
152
+ * const result = await analyzeParameters({ spec: 'openapi.yaml', tests: 'tests/**\/*.ts' });
153
+ */
154
+ async function analyzeParameters(options) {
155
+ var _a;
156
+ const specPath = path.resolve(options.spec);
157
+ const testsGlob = resolveTestsGlob(options.tests);
158
+ const reportsDir = resolveReportsDir(options);
159
+ const formats = (0, reporting_1.parseFormats)((_a = options.format) !== null && _a !== void 0 ? _a : 'json,html');
160
+ const parameters = await (0, parameterCoverage_1.parseParameters)(specPath);
161
+ const coverages = await (0, parameterCoverage_1.analyzeParameterCoverage)(parameters, testsGlob);
162
+ const report = (0, parameterCoverage_1.buildParameterCoverageReport)(coverages);
163
+ (0, parameterCoverage_1.generateParameterReports)(report, reportsDir);
164
+ const result = {
165
+ type: 'parameter',
166
+ totalItems: report.totalParameters,
167
+ coveredItems: coverages.filter((c) => c.ratio > 0).length,
168
+ coveragePercent: report.averageCoverage,
169
+ details: report,
170
+ };
171
+ const thresholds = {};
172
+ if (options.thresholdParameter !== undefined && options.thresholdParameter > 0) {
173
+ thresholds['parameter'] = options.thresholdParameter;
174
+ }
175
+ (0, reporting_1.generateMultiFormatReports)([result], formats, reportsDir, thresholds);
176
+ return result;
177
+ }
178
+ /**
179
+ * Analyse how well tests cover defined business rules.
180
+ *
181
+ * @example
182
+ * const { analyzeBusinessRules } = require('api-test-coverage-analyzer');
183
+ * const result = await analyzeBusinessRules({ rules: 'business-rules.yaml', tests: 'tests/**\/*.ts' });
184
+ */
185
+ async function analyzeBusinessRules(options) {
186
+ var _a;
187
+ const rulesPath = path.resolve(options.rules);
188
+ const testsGlob = resolveTestsGlob(options.tests);
189
+ const reportsDir = resolveReportsDir(options);
190
+ const formats = (0, reporting_1.parseFormats)((_a = options.format) !== null && _a !== void 0 ? _a : 'json,html');
191
+ const rules = (0, businessCoverage_1.parseBusinessRules)(rulesPath);
192
+ const coverages = await (0, businessCoverage_1.analyzeBusinessCoverage)(rules, testsGlob);
193
+ const report = (0, businessCoverage_1.buildBusinessCoverageReport)(coverages);
194
+ (0, businessCoverage_1.generateBusinessReports)(report, reportsDir);
195
+ const result = {
196
+ type: 'business',
197
+ totalItems: report.total,
198
+ coveredItems: report.covered,
199
+ coveragePercent: report.percentage,
200
+ details: report,
201
+ };
202
+ const thresholds = {};
203
+ if (options.thresholdBusiness !== undefined && options.thresholdBusiness > 0) {
204
+ thresholds['business'] = options.thresholdBusiness;
205
+ }
206
+ (0, reporting_1.generateMultiFormatReports)([result], formats, reportsDir, thresholds);
207
+ return result;
208
+ }
209
+ /**
210
+ * Analyse how well integration tests exercise defined end-to-end flows.
211
+ *
212
+ * @example
213
+ * const { analyzeIntegrationFlows } = require('api-test-coverage-analyzer');
214
+ * const result = await analyzeIntegrationFlows({ flows: 'integration-flows.yaml', tests: 'tests/**\/*.ts' });
215
+ */
216
+ async function analyzeIntegrationFlows(options) {
217
+ var _a;
218
+ const flowsPath = path.resolve(options.flows);
219
+ const testsGlob = resolveTestsGlob(options.tests);
220
+ const reportsDir = resolveReportsDir(options);
221
+ const formats = (0, reporting_1.parseFormats)((_a = options.format) !== null && _a !== void 0 ? _a : 'json,html');
222
+ const flows = (0, integrationCoverage_1.parseIntegrationFlows)(flowsPath);
223
+ const coverages = await (0, integrationCoverage_1.analyzeIntegrationCoverage)(flows, testsGlob);
224
+ const report = (0, integrationCoverage_1.buildIntegrationCoverageReport)(coverages);
225
+ (0, integrationCoverage_1.generateIntegrationReports)(report, reportsDir);
226
+ const result = {
227
+ type: 'integration',
228
+ totalItems: report.total,
229
+ coveredItems: report.complete,
230
+ coveragePercent: report.percentage,
231
+ details: report,
232
+ };
233
+ const thresholds = {};
234
+ if (options.thresholdIntegration !== undefined && options.thresholdIntegration > 0) {
235
+ thresholds['integration'] = options.thresholdIntegration;
236
+ }
237
+ (0, reporting_1.generateMultiFormatReports)([result], formats, reportsDir, thresholds);
238
+ return result;
239
+ }
240
+ /**
241
+ * Analyse how thoroughly tests cover error handling and negative scenarios.
242
+ *
243
+ * @example
244
+ * const { analyzeErrorCoverage } = require('api-test-coverage-analyzer');
245
+ * const result = await analyzeErrorCoverage({ spec: 'openapi.yaml', tests: 'tests/**\/*.ts' });
246
+ */
247
+ async function analyzeErrorHandling(options) {
248
+ var _a;
249
+ const specPath = path.resolve(options.spec);
250
+ const testsGlob = resolveTestsGlob(options.tests);
251
+ const reportsDir = resolveReportsDir(options);
252
+ const formats = (0, reporting_1.parseFormats)((_a = options.format) !== null && _a !== void 0 ? _a : 'json,html');
253
+ const scenarios = await (0, errorCoverage_1.parseErrorScenarios)(specPath);
254
+ const coverages = await (0, errorCoverage_1.analyzeErrorCoverage)(scenarios, testsGlob);
255
+ const report = (0, errorCoverage_1.buildErrorCoverageReport)(coverages);
256
+ (0, errorCoverage_1.generateErrorReports)(report, reportsDir);
257
+ const result = {
258
+ type: 'error',
259
+ totalItems: report.total,
260
+ coveredItems: report.covered,
261
+ coveragePercent: report.percentage,
262
+ details: report,
263
+ };
264
+ const thresholds = {};
265
+ if (options.thresholdError !== undefined && options.thresholdError > 0) {
266
+ thresholds['error'] = options.thresholdError;
267
+ }
268
+ (0, reporting_1.generateMultiFormatReports)([result], formats, reportsDir, thresholds);
269
+ return result;
270
+ }
271
+ /**
272
+ * Analyse how comprehensively tests cover security controls defined in the API spec.
273
+ *
274
+ * @example
275
+ * const { analyzeSecurityCoverage } = require('api-test-coverage-analyzer');
276
+ * const result = await analyzeSecurityCoverage({ spec: 'openapi-security.yaml', tests: 'tests/**\/*.ts' });
277
+ */
278
+ async function analyzeSecurityControls(options) {
279
+ var _a;
280
+ const specPath = path.resolve(options.spec);
281
+ const testsGlob = resolveTestsGlob(options.tests);
282
+ const scanReportPath = options.scanReport ? path.resolve(options.scanReport) : undefined;
283
+ const reportsDir = resolveReportsDir(options);
284
+ const formats = (0, reporting_1.parseFormats)((_a = options.format) !== null && _a !== void 0 ? _a : 'json,html');
285
+ const controls = await (0, securityCoverage_1.parseSecurityControls)(specPath);
286
+ const coverages = await (0, securityCoverage_1.analyzeSecurityCoverage)(controls, testsGlob, scanReportPath);
287
+ const report = (0, securityCoverage_1.buildSecurityCoverageReport)(coverages, scanReportPath ? coverages.filter((c) => c.coveredByScanReport).length : 0);
288
+ (0, securityCoverage_1.generateSecurityReports)(report, reportsDir);
289
+ const result = {
290
+ type: 'security',
291
+ totalItems: report.total,
292
+ coveredItems: report.covered,
293
+ coveragePercent: report.percentage,
294
+ details: report,
295
+ };
296
+ const thresholds = {};
297
+ if (options.thresholdSecurity !== undefined && options.thresholdSecurity > 0) {
298
+ thresholds['security'] = options.thresholdSecurity;
299
+ }
300
+ (0, reporting_1.generateMultiFormatReports)([result], formats, reportsDir, thresholds);
301
+ return result;
302
+ }
303
+ /**
304
+ * Analyse performance and resilience coverage.
305
+ *
306
+ * @example
307
+ * const { analyzePerfResilience } = require('api-test-coverage-analyzer');
308
+ * const results = await analyzePerfResilience({ spec: 'openapi.yaml', tests: 'tests/**\/*.ts' });
309
+ */
310
+ async function analyzePerfResilience(options) {
311
+ var _a, _b, _c;
312
+ const specPath = path.resolve(options.spec);
313
+ const testsGlob = resolveTestsGlob(options.tests);
314
+ const reportsDir = resolveReportsDir(options);
315
+ const formats = (0, reporting_1.parseFormats)((_a = options.format) !== null && _a !== void 0 ? _a : 'json,html');
316
+ const perfThresholds = {
317
+ responseMs: (_b = options.thresholdResponseMs) !== null && _b !== void 0 ? _b : 500,
318
+ errorRate: (_c = options.thresholdErrorRate) !== null && _c !== void 0 ? _c : 0.05,
319
+ };
320
+ const endpoints = await (0, perfResilienceCoverage_1.parseEndpointsFromSpec)(specPath);
321
+ const loadResultPaths = options.loadResults
322
+ ? options.loadResults.split(',').map((p) => path.resolve(p.trim()))
323
+ : [];
324
+ const metricsMap = loadResultPaths.length > 0 ? (0, perfResilienceCoverage_1.parseLoadTestResults)(loadResultPaths) : new Map();
325
+ const performanceCoverages = (0, perfResilienceCoverage_1.analyzePerformanceCoverage)(endpoints, metricsMap, perfThresholds);
326
+ const scenarios = (0, perfResilienceCoverage_1.buildResilienceScenarios)(endpoints);
327
+ const resilienceCoverages = await (0, perfResilienceCoverage_1.analyzeResilienceCoverage)(scenarios, testsGlob);
328
+ const report = (0, perfResilienceCoverage_1.buildPerfResilienceReport)(performanceCoverages, resilienceCoverages);
329
+ (0, perfResilienceCoverage_1.generatePerfResilienceReports)(report, reportsDir);
330
+ const perfResult = {
331
+ type: 'performance',
332
+ totalItems: report.totalEndpoints,
333
+ coveredItems: report.endpointsWithLoadData,
334
+ coveragePercent: report.performanceCoveragePercent,
335
+ details: report,
336
+ };
337
+ const resilienceResult = {
338
+ type: 'resilience',
339
+ totalItems: report.totalResilienceScenarios,
340
+ coveredItems: report.coveredResilienceScenarios,
341
+ coveragePercent: report.resilienceCoveragePercent,
342
+ details: report,
343
+ };
344
+ const thresholds = {};
345
+ if (options.thresholdPerformance !== undefined && options.thresholdPerformance > 0) {
346
+ thresholds['performance'] = options.thresholdPerformance;
347
+ }
348
+ if (options.thresholdResilience !== undefined && options.thresholdResilience > 0) {
349
+ thresholds['resilience'] = options.thresholdResilience;
350
+ }
351
+ (0, reporting_1.generateMultiFormatReports)([perfResult, resilienceResult], formats, reportsDir, thresholds);
352
+ return [perfResult, resilienceResult];
353
+ }
354
+ /**
355
+ * Run the integrated security scanning workflow.
356
+ * Executes configured scanners (Semgrep, Trivy, ZAP), normalizes findings,
357
+ * evaluates the security gate, and generates reports.
358
+ *
359
+ * @example
360
+ * const { runSecurityAnalysis } = require('api-test-coverage-analyzer');
361
+ * const summary = await runSecurityAnalysis({
362
+ * config: {
363
+ * enabled: true,
364
+ * workspace: '.',
365
+ * scanners: { trivy: { enabled: true, mode: 'import', reportPath: 'trivy.json' } },
366
+ * gate: { failOnCritical: true, maxSecrets: 0 }
367
+ * }
368
+ * });
369
+ */
370
+ async function runSecurityAnalysis(options) {
371
+ var _a;
372
+ const reportsDir = path.resolve((_a = options.reportsDir) !== null && _a !== void 0 ? _a : 'reports');
373
+ return (0, index_4.runSecurityScan)(options.config, reportsDir);
374
+ }
375
+ /**
376
+ * Compare two API spec versions and verify consumer contracts.
377
+ *
378
+ * @example
379
+ * const { analyzeCompatibility } = require('api-test-coverage-analyzer');
380
+ * const results = await analyzeCompatibility({ oldSpec: 'v1.yaml', newSpec: 'v2.yaml' });
381
+ */
382
+ async function analyzeCompatibility(options) {
383
+ const oldSpecPath = path.resolve(options.oldSpec);
384
+ const newSpecPath = path.resolve(options.newSpec);
385
+ const reportsDir = resolveReportsDir(options);
386
+ const oldApi = await (0, compatibilityCoverage_1.loadSpec)(oldSpecPath);
387
+ const newApi = await (0, compatibilityCoverage_1.loadSpec)(newSpecPath);
388
+ const changes = (0, compatibilityCoverage_1.compareSpecs)(oldApi, newApi);
389
+ const breakingChanges = changes.filter((c) => c.breaking);
390
+ const contracts = options.contracts ? await (0, compatibilityCoverage_1.parseContractFiles)(options.contracts) : [];
391
+ const verificationResults = (0, compatibilityCoverage_1.verifyContracts)(contracts, newApi);
392
+ const report = (0, compatibilityCoverage_1.buildCompatibilityReport)(oldApi, newApi, changes, verificationResults, oldSpecPath, newSpecPath);
393
+ (0, compatibilityCoverage_1.generateCompatibilityReports)(report, reportsDir);
394
+ const formats = (0, reporting_1.parseFormats)('json,html');
395
+ const uniqueAffectedEndpoints = new Set(breakingChanges.filter((c) => c.changeType !== 'added').map((c) => `${c.method}:${c.path}`)).size;
396
+ const endpointsUnaffectedByBreakingChanges = report.totalOldEndpoints - uniqueAffectedEndpoints;
397
+ const compatResult = {
398
+ type: 'compatibility',
399
+ totalItems: report.totalOldEndpoints,
400
+ coveredItems: endpointsUnaffectedByBreakingChanges,
401
+ coveragePercent: report.compatibilityPercent,
402
+ details: report,
403
+ };
404
+ const contractResult = {
405
+ type: 'contract-coverage',
406
+ totalItems: report.totalNewEndpoints,
407
+ coveredItems: report.contractCoveredEndpoints,
408
+ coveragePercent: report.contractCoveragePercent,
409
+ details: report,
410
+ };
411
+ const thresholds = {};
412
+ if (options.thresholdCompat !== undefined && options.thresholdCompat > 0) {
413
+ thresholds['compatibility'] = options.thresholdCompat;
414
+ thresholds['contract-coverage'] = options.thresholdCompat;
415
+ }
416
+ (0, reporting_1.generateMultiFormatReports)([compatResult, contractResult], formats, reportsDir, thresholds);
417
+ return [compatResult, contractResult];
418
+ }
419
+ /**
420
+ * Evaluate a quality gate against pre-computed coverage results, generate a
421
+ * publishable build bundle, write the GitHub Actions step summary (if requested),
422
+ * and return the exit code.
423
+ *
424
+ * This is the **canonical entry-point** for consuming teams. They should not
425
+ * need to implement any threshold comparison or exit-code logic themselves.
426
+ *
427
+ * @example
428
+ * const { runAnalysisAndEnforceQualityGate } = require('api-test-coverage-analyzer');
429
+ * const { qualityGate, exitCode } = await runAnalysisAndEnforceQualityGate({
430
+ * results,
431
+ * config: { thresholds: { global: 100 } },
432
+ * });
433
+ * process.exitCode = exitCode;
434
+ */
435
+ async function runAnalysisAndEnforceQualityGate(options) {
436
+ var _a, _b, _c, _d, _e;
437
+ const { results, config, branch, reportsDir, writeGitHubSummary, pagesUrl } = options;
438
+ // 1. Evaluate quality gate
439
+ const gateConfig = {
440
+ thresholds: config.thresholds,
441
+ thresholdsByBranch: config.thresholdsByBranch,
442
+ qualityGate: config.qualityGate,
443
+ };
444
+ const qualityGate = (0, qualityGate_1.evaluateQualityGate)(results, gateConfig, branch);
445
+ // 2. Generate the publishable build bundle (always – even on failure)
446
+ let reports = null;
447
+ const publishingConfig = (_a = config.publishing) !== null && _a !== void 0 ? _a : {};
448
+ if (publishingConfig.enabled !== false) {
449
+ const thresholds = {
450
+ ...((_b = config.thresholds) !== null && _b !== void 0 ? _b : {}),
451
+ };
452
+ reports = (0, publishing_1.generateBuildBundle)(results, qualityGate, publishingConfig, thresholds);
453
+ // Copy report files into the bundle
454
+ if (reportsDir) {
455
+ const artifactsCfg = (_c = publishingConfig.artifacts) !== null && _c !== void 0 ? _c : {};
456
+ (0, publishing_1.copyReportFilesToBundle)(reportsDir, reports.bundleDir, reports.siteDir, artifactsCfg);
457
+ }
458
+ }
459
+ // 3. Print CI summary
460
+ (0, buildSummary_1.printCiSummary)(results, qualityGate);
461
+ // 4. Write GitHub Actions step summary if requested
462
+ if (writeGitHubSummary && reports) {
463
+ const summary = (0, buildSummary_1.generateStepSummary)(results, qualityGate, reports.metadata, pagesUrl);
464
+ (0, buildSummary_1.writeStepSummary)(summary);
465
+ }
466
+ // 5. Generate built-in summary files (always – even on failure)
467
+ const summaryConfig = config.summary;
468
+ const summaryEnabled = (summaryConfig === null || summaryConfig === void 0 ? void 0 : summaryConfig.enabled) !== false;
469
+ if (summaryEnabled && reportsDir) {
470
+ const thresholds = { ...((_d = config.thresholds) !== null && _d !== void 0 ? _d : {}) };
471
+ const summaryInput = {
472
+ results,
473
+ qualityGate,
474
+ thresholds,
475
+ summaryConfig,
476
+ branch,
477
+ pagesUrl,
478
+ };
479
+ await (0, index_5.generateBuildSummary)(summaryInput, reportsDir);
480
+ await (0, index_5.generatePrSummary)(summaryInput, reportsDir);
481
+ }
482
+ // 6. Compute exit code
483
+ const failBuild = ((_e = config.qualityGate) === null || _e === void 0 ? void 0 : _e.failBuildOnThresholdMiss) !== false;
484
+ const exitCode = failBuild && !qualityGate.passed ? 1 : 0;
485
+ return { reports, qualityGate, exitCode };
486
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * MCP integration – client.
3
+ *
4
+ * Manages transport connections, sends prompts, and returns raw MCP responses.
5
+ * Supports stdio (child-process) and HTTP transports.
6
+ *
7
+ * Security:
8
+ * - Server URLs validated against allowlist before connection.
9
+ * - Transports validated against allowlist.
10
+ * - Payload size validated before sending.
11
+ * - Secrets redacted from all outgoing payloads.
12
+ * - Hard timeout enforced per request.
13
+ */
14
+ import * as childProcess from 'child_process';
15
+ import type { McpConfig, McpPromptRequest, McpRawResponse } from '../types';
16
+ /** Spawn function type – injectable for testing */
17
+ export type SpawnFn = typeof childProcess.spawn;
18
+ export declare class McpClient {
19
+ private readonly globalConfig;
20
+ private readonly spawnFn;
21
+ /**
22
+ * @param globalConfig MCP configuration block
23
+ * @param spawnFn Optional spawn override (useful in unit tests to avoid
24
+ * spawning real child processes)
25
+ */
26
+ constructor(globalConfig: McpConfig, spawnFn?: SpawnFn);
27
+ /**
28
+ * Send a prompt to the named MCP server and return the raw response.
29
+ *
30
+ * @param serverName Key in config.servers (e.g. "coverageSummary")
31
+ * @param request Prompt request to send
32
+ */
33
+ send(serverName: string, request: McpPromptRequest): Promise<McpRawResponse>;
34
+ private sendHttp;
35
+ private sendStdio;
36
+ }
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAY5E,mDAAmD;AACnD,MAAM,MAAM,OAAO,GAAG,OAAO,YAAY,CAAC,KAAK,CAAC;AAIhD,qBAAa,SAAS;IASlB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAR/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC;;;;OAIG;gBAEgB,YAAY,EAAE,SAAS,EACxC,OAAO,CAAC,EAAE,OAAO;IAKnB;;;;;OAKG;IACG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;IAiDlF,OAAO,CAAC,QAAQ;IA6EhB,OAAO,CAAC,SAAS;CAwDlB"}