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,100 @@
1
+ "use strict";
2
+ /**
3
+ * Shared tree-sitter utilities.
4
+ *
5
+ * Wraps the tree-sitter native module with lazy loading and graceful
6
+ * fallback. Every tree-sitter language module calls `createParser()` and
7
+ * treats a null return as "fall back to regex analysis".
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createParser = createParser;
11
+ exports.walkTree = walkTree;
12
+ exports.findNodes = findNodes;
13
+ exports.fieldText = fieldText;
14
+ exports.firstChildOfType = firstChildOfType;
15
+ exports.hasChildOfType = hasChildOfType;
16
+ exports.extractStringValue = extractStringValue;
17
+ /**
18
+ * Create a tree-sitter parser for the given language grammar.
19
+ *
20
+ * @param grammarModule The `require()`-resolved grammar object from tree-sitter-*
21
+ * @returns A configured Parser instance, or null if native loading fails.
22
+ */
23
+ function createParser(grammarModule) {
24
+ try {
25
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
26
+ const Parser = require('tree-sitter');
27
+ const parser = new Parser();
28
+ parser.setLanguage(grammarModule);
29
+ return parser;
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ /**
36
+ * Recursively walk a tree-sitter node tree, calling `visitor` on each node.
37
+ * Pass `nodeTypes` to filter — visitor is only called when node.type matches.
38
+ */
39
+ function walkTree(node, visitor, nodeTypes) {
40
+ var _a;
41
+ if (!node)
42
+ return;
43
+ if (!nodeTypes || nodeTypes.has(node.type)) {
44
+ visitor(node);
45
+ }
46
+ for (let i = 0; i < ((_a = node.childCount) !== null && _a !== void 0 ? _a : 0); i++) {
47
+ walkTree(node.child(i), visitor, nodeTypes);
48
+ }
49
+ }
50
+ /**
51
+ * Collect all descendant nodes whose type is in `nodeTypes`.
52
+ */
53
+ function findNodes(root, nodeTypes) {
54
+ const types = new Set(nodeTypes);
55
+ const results = [];
56
+ walkTree(root, (n) => results.push(n), types);
57
+ return results;
58
+ }
59
+ /**
60
+ * Get the text of a named child field, or undefined.
61
+ */
62
+ function fieldText(node, fieldName) {
63
+ var _a;
64
+ const child = (_a = node === null || node === void 0 ? void 0 : node.childForFieldName) === null || _a === void 0 ? void 0 : _a.call(node, fieldName);
65
+ return child ? child.text : undefined;
66
+ }
67
+ /**
68
+ * Get the first child of a given type.
69
+ */
70
+ function firstChildOfType(node, type) {
71
+ var _a;
72
+ for (let i = 0; i < ((_a = node === null || node === void 0 ? void 0 : node.childCount) !== null && _a !== void 0 ? _a : 0); i++) {
73
+ const child = node.child(i);
74
+ if ((child === null || child === void 0 ? void 0 : child.type) === type)
75
+ return child;
76
+ }
77
+ return undefined;
78
+ }
79
+ /**
80
+ * Check if a node has a child of the given type.
81
+ */
82
+ function hasChildOfType(node, type) {
83
+ return firstChildOfType(node, type) !== undefined;
84
+ }
85
+ /**
86
+ * Extract an unquoted string value from a string_literal / string node.
87
+ */
88
+ function extractStringValue(node) {
89
+ var _a;
90
+ if (!node)
91
+ return undefined;
92
+ const raw = (_a = node.text) !== null && _a !== void 0 ? _a : '';
93
+ // Remove surrounding quotes
94
+ if ((raw.startsWith('"') && raw.endsWith('"')) ||
95
+ (raw.startsWith("'") && raw.endsWith("'")) ||
96
+ (raw.startsWith('`') && raw.endsWith('`'))) {
97
+ return raw.slice(1, -1);
98
+ }
99
+ return raw;
100
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * TypeScript language analyzer.
3
+ *
4
+ * TypeScript analysis is identical to JavaScript but registered under the
5
+ * 'typescript' language key. Both use @typescript-eslint/typescript-estree
6
+ * which natively handles TS syntax (generics, enums, decorators, etc.).
7
+ */
8
+ import { JavaScriptAnalyzer } from '../javascript/index';
9
+ import type { SupportedLanguage, ParsedSourceFile } from '../../ast/astTypes';
10
+ export declare class TypeScriptAnalyzer extends JavaScriptAnalyzer {
11
+ readonly language: SupportedLanguage;
12
+ parse(filePath: string, content: string): ParsedSourceFile;
13
+ }
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/languages/typescript/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG9E,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,SAAkB,QAAQ,EAAE,iBAAiB,CAAgB;IAEpD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB;CAGpE"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ /**
3
+ * TypeScript language analyzer.
4
+ *
5
+ * TypeScript analysis is identical to JavaScript but registered under the
6
+ * 'typescript' language key. Both use @typescript-eslint/typescript-estree
7
+ * which natively handles TS syntax (generics, enums, decorators, etc.).
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.TypeScriptAnalyzer = void 0;
11
+ const index_1 = require("../javascript/index");
12
+ const parserRegistry_1 = require("../../ast/parserRegistry");
13
+ const parser_1 = require("../javascript/parser");
14
+ class TypeScriptAnalyzer extends index_1.JavaScriptAnalyzer {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.language = 'typescript';
18
+ }
19
+ parse(filePath, content) {
20
+ return (0, parser_1.parseJsTs)(filePath, content, 'typescript');
21
+ }
22
+ }
23
+ exports.TypeScriptAnalyzer = TypeScriptAnalyzer;
24
+ // Register for 'typescript'
25
+ (0, parserRegistry_1.registerAnalyzer)('typescript', () => new TypeScriptAnalyzer());
@@ -0,0 +1,228 @@
1
+ /**
2
+ * api-test-coverage-analyzer – Public Library API
3
+ *
4
+ * Import individual analyze* functions in your own scripts:
5
+ *
6
+ * const { analyzeEndpoints } = require('api-test-coverage-analyzer');
7
+ * const results = await analyzeEndpoints({ spec: 'openapi.yaml', tests: 'tests/**\/*.ts' });
8
+ */
9
+ export type { SecurityFinding, SecurityGateConfig, SecurityGateResult, SecurityScanConfig, SecurityScanSummary, ScannerResult, } from '../security/index';
10
+ export { runSecurityScan, buildSecurityScanSummary, generateSecurityScanReports, evaluateSecurityGate, normalizeSemgrepOutput, normalizeTrivyOutput, normalizeZapOutput, } from '../security/index';
11
+ export type { SecurityScanMetricsSummary, IntelligenceMetricsSummary } from '../observability';
12
+ export { recordSecurityScanMetrics, recordIntelligenceMetrics } from '../observability';
13
+ export type { FunctionalFinding, MissingTestRecommendation, IntelligenceInput, IntelligenceReport, IntelligenceSummary, RiskScoreComponents, RiskBand, Severity, RecommendationPriority, RecommendedTestType, FindingCategory, FindingSource, } from '../intelligence/index';
14
+ export { runIntelligenceEngine, computeRiskScore, scoreToRiskBand, scoreToPriority, runLinkageEngine, buildRecommendationFromFinding, writeIntelligenceReports, renderCoverageIntelligenceMd, renderMissingTestsMd, renderRiskPrioritizationMd, } from '../intelligence/index';
15
+ export { generateBuildSummary, generatePrSummary } from '../summary/index';
16
+ export type { SummaryInput, SummaryResult, SummarySection, SummaryConfig, } from '../summary/index';
17
+ import { SecurityScanConfig, SecurityScanSummary } from '../security/index';
18
+ import { parseFormats, checkThresholds, CoverageResult, ReportFormat } from '../reporting';
19
+ import { evaluateQualityGate, QualityGateResult, QualityGateConfig } from '../qualityGate';
20
+ import { GeneratedReports, BuildMetadata } from '../publishing';
21
+ import { generateStepSummary, writeStepSummary, generatePrComment, printCiSummary } from '../buildSummary';
22
+ import type { CoverageConfig } from '../config';
23
+ export type { CoverageResult, ReportFormat, QualityGateResult, GeneratedReports, BuildMetadata };
24
+ export { parseFormats, checkThresholds, evaluateQualityGate };
25
+ export { generateStepSummary, writeStepSummary, generatePrComment, printCiSummary };
26
+ export interface BaseOptions {
27
+ /** Glob pattern(s) for test files */
28
+ tests: string | string[];
29
+ /** Comma-separated list of output formats (json,html,csv,junit). Default: json,html */
30
+ format?: string;
31
+ /** Directory to write reports into. Default: reports/ */
32
+ reportsDir?: string;
33
+ }
34
+ export interface EndpointOptions extends BaseOptions {
35
+ /** Path to the OpenAPI/Swagger spec file */
36
+ spec: string;
37
+ /** Language(s) to analyse. Default: auto */
38
+ language?: string | string[];
39
+ /** Minimum required endpoint coverage percentage */
40
+ thresholdEndpoint?: number;
41
+ }
42
+ export interface ParameterOptions extends BaseOptions {
43
+ /** Path to the OpenAPI/Swagger spec file */
44
+ spec: string;
45
+ /** Minimum required parameter coverage percentage */
46
+ thresholdParameter?: number;
47
+ }
48
+ export interface BusinessOptions extends BaseOptions {
49
+ /** Path to the business rules YAML/JSON file */
50
+ rules: string;
51
+ /** Minimum required business rule coverage percentage */
52
+ thresholdBusiness?: number;
53
+ }
54
+ export interface IntegrationOptions extends BaseOptions {
55
+ /** Path to the integration flows YAML/JSON file */
56
+ flows: string;
57
+ /** Minimum required integration flow coverage percentage */
58
+ thresholdIntegration?: number;
59
+ }
60
+ export interface ErrorOptions extends BaseOptions {
61
+ /** Path to the OpenAPI/Swagger spec file (for error scenarios) */
62
+ spec: string;
63
+ /** Minimum required error coverage percentage */
64
+ thresholdError?: number;
65
+ }
66
+ export interface SecurityOptions extends BaseOptions {
67
+ /** Path to the OpenAPI/Swagger security spec file */
68
+ spec: string;
69
+ /** Path to an external security scanner report */
70
+ scanReport?: string;
71
+ /** Minimum required security coverage percentage */
72
+ thresholdSecurity?: number;
73
+ }
74
+ export interface PerfResilienceOptions extends BaseOptions {
75
+ /** Path to the OpenAPI/Swagger spec file */
76
+ spec: string;
77
+ /** Comma-separated paths to load-test result files (JMeter .jtl/.csv or k6 .json) */
78
+ loadResults?: string;
79
+ /** Maximum acceptable median response time in ms. Default: 500 */
80
+ thresholdResponseMs?: number;
81
+ /** Maximum acceptable error rate as a decimal (0–1). Default: 0.05 */
82
+ thresholdErrorRate?: number;
83
+ /** Minimum required performance coverage percentage */
84
+ thresholdPerformance?: number;
85
+ /** Minimum required resilience coverage percentage */
86
+ thresholdResilience?: number;
87
+ }
88
+ export interface CompatibilityOptions {
89
+ /** Path to the previous (published) OpenAPI/Swagger spec */
90
+ oldSpec: string;
91
+ /** Path to the current spec to be published */
92
+ newSpec: string;
93
+ /** Glob pattern for consumer contract files (e.g. Pact JSON files) */
94
+ contracts?: string;
95
+ /** Minimum required compatibility percentage */
96
+ thresholdCompat?: number;
97
+ /** Directory to write reports into. Default: reports/ */
98
+ reportsDir?: string;
99
+ }
100
+ /**
101
+ * Analyse which API endpoints are covered by integration tests.
102
+ *
103
+ * @example
104
+ * const { analyzeEndpoints } = require('api-test-coverage-analyzer');
105
+ * const result = await analyzeEndpoints({ spec: 'openapi.yaml', tests: 'tests/**\/*.ts' });
106
+ */
107
+ export declare function analyzeEndpoints(options: EndpointOptions): Promise<CoverageResult>;
108
+ /**
109
+ * Analyse how thoroughly each API parameter is tested.
110
+ *
111
+ * @example
112
+ * const { analyzeParameters } = require('api-test-coverage-analyzer');
113
+ * const result = await analyzeParameters({ spec: 'openapi.yaml', tests: 'tests/**\/*.ts' });
114
+ */
115
+ export declare function analyzeParameters(options: ParameterOptions): Promise<CoverageResult>;
116
+ /**
117
+ * Analyse how well tests cover defined business rules.
118
+ *
119
+ * @example
120
+ * const { analyzeBusinessRules } = require('api-test-coverage-analyzer');
121
+ * const result = await analyzeBusinessRules({ rules: 'business-rules.yaml', tests: 'tests/**\/*.ts' });
122
+ */
123
+ export declare function analyzeBusinessRules(options: BusinessOptions): Promise<CoverageResult>;
124
+ /**
125
+ * Analyse how well integration tests exercise defined end-to-end flows.
126
+ *
127
+ * @example
128
+ * const { analyzeIntegrationFlows } = require('api-test-coverage-analyzer');
129
+ * const result = await analyzeIntegrationFlows({ flows: 'integration-flows.yaml', tests: 'tests/**\/*.ts' });
130
+ */
131
+ export declare function analyzeIntegrationFlows(options: IntegrationOptions): Promise<CoverageResult>;
132
+ /**
133
+ * Analyse how thoroughly tests cover error handling and negative scenarios.
134
+ *
135
+ * @example
136
+ * const { analyzeErrorCoverage } = require('api-test-coverage-analyzer');
137
+ * const result = await analyzeErrorCoverage({ spec: 'openapi.yaml', tests: 'tests/**\/*.ts' });
138
+ */
139
+ export declare function analyzeErrorHandling(options: ErrorOptions): Promise<CoverageResult>;
140
+ /**
141
+ * Analyse how comprehensively tests cover security controls defined in the API spec.
142
+ *
143
+ * @example
144
+ * const { analyzeSecurityCoverage } = require('api-test-coverage-analyzer');
145
+ * const result = await analyzeSecurityCoverage({ spec: 'openapi-security.yaml', tests: 'tests/**\/*.ts' });
146
+ */
147
+ export declare function analyzeSecurityControls(options: SecurityOptions): Promise<CoverageResult>;
148
+ /**
149
+ * Analyse performance and resilience coverage.
150
+ *
151
+ * @example
152
+ * const { analyzePerfResilience } = require('api-test-coverage-analyzer');
153
+ * const results = await analyzePerfResilience({ spec: 'openapi.yaml', tests: 'tests/**\/*.ts' });
154
+ */
155
+ export declare function analyzePerfResilience(options: PerfResilienceOptions): Promise<[CoverageResult, CoverageResult]>;
156
+ /**
157
+ * Options for running the integrated security scanner.
158
+ */
159
+ export interface SecurityScanOptions {
160
+ /** Security scanning configuration */
161
+ config: SecurityScanConfig;
162
+ /** Directory to write reports into. Default: reports/ */
163
+ reportsDir?: string;
164
+ }
165
+ /**
166
+ * Run the integrated security scanning workflow.
167
+ * Executes configured scanners (Semgrep, Trivy, ZAP), normalizes findings,
168
+ * evaluates the security gate, and generates reports.
169
+ *
170
+ * @example
171
+ * const { runSecurityAnalysis } = require('api-test-coverage-analyzer');
172
+ * const summary = await runSecurityAnalysis({
173
+ * config: {
174
+ * enabled: true,
175
+ * workspace: '.',
176
+ * scanners: { trivy: { enabled: true, mode: 'import', reportPath: 'trivy.json' } },
177
+ * gate: { failOnCritical: true, maxSecrets: 0 }
178
+ * }
179
+ * });
180
+ */
181
+ export declare function runSecurityAnalysis(options: SecurityScanOptions): Promise<SecurityScanSummary>;
182
+ /**
183
+ * Compare two API spec versions and verify consumer contracts.
184
+ *
185
+ * @example
186
+ * const { analyzeCompatibility } = require('api-test-coverage-analyzer');
187
+ * const results = await analyzeCompatibility({ oldSpec: 'v1.yaml', newSpec: 'v2.yaml' });
188
+ */
189
+ export declare function analyzeCompatibility(options: CompatibilityOptions): Promise<[CoverageResult, CoverageResult]>;
190
+ /**
191
+ * Options for the all-in-one quality gate + publishing runner.
192
+ */
193
+ export interface RunAnalysisOptions {
194
+ /** Pre-computed coverage results (from one or more analyze* calls) */
195
+ results: CoverageResult[];
196
+ /** Quality gate + threshold configuration */
197
+ config: CoverageConfig & QualityGateConfig;
198
+ /** Current git branch name (for branch-aware thresholds) */
199
+ branch?: string;
200
+ /** Directory where individual reports have been written */
201
+ reportsDir?: string;
202
+ /** If true, generate and write the GitHub Actions step summary */
203
+ writeGitHubSummary?: boolean;
204
+ /** GitHub Pages URL (included in step summary) */
205
+ pagesUrl?: string;
206
+ }
207
+ /**
208
+ * Evaluate a quality gate against pre-computed coverage results, generate a
209
+ * publishable build bundle, write the GitHub Actions step summary (if requested),
210
+ * and return the exit code.
211
+ *
212
+ * This is the **canonical entry-point** for consuming teams. They should not
213
+ * need to implement any threshold comparison or exit-code logic themselves.
214
+ *
215
+ * @example
216
+ * const { runAnalysisAndEnforceQualityGate } = require('api-test-coverage-analyzer');
217
+ * const { qualityGate, exitCode } = await runAnalysisAndEnforceQualityGate({
218
+ * results,
219
+ * config: { thresholds: { global: 100 } },
220
+ * });
221
+ * process.exitCode = exitCode;
222
+ */
223
+ export declare function runAnalysisAndEnforceQualityGate(options: RunAnalysisOptions): Promise<{
224
+ reports: GeneratedReports | null;
225
+ qualityGate: QualityGateResult;
226
+ exitCode: number;
227
+ }>;
228
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"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"}