@machina.ai/openapi-contract-tester 2.1.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 (431) hide show
  1. package/.env.example +91 -0
  2. package/README.md +472 -0
  3. package/dist/ai-engine/assertion-generator.d.ts +48 -0
  4. package/dist/ai-engine/assertion-generator.d.ts.map +1 -0
  5. package/dist/ai-engine/assertion-generator.js +166 -0
  6. package/dist/ai-engine/assertion-generator.js.map +1 -0
  7. package/dist/ai-engine/context-data-generator.d.ts +38 -0
  8. package/dist/ai-engine/context-data-generator.d.ts.map +1 -0
  9. package/dist/ai-engine/context-data-generator.js +146 -0
  10. package/dist/ai-engine/context-data-generator.js.map +1 -0
  11. package/dist/ai-engine/dataflow-detector.d.ts +53 -0
  12. package/dist/ai-engine/dataflow-detector.d.ts.map +1 -0
  13. package/dist/ai-engine/dataflow-detector.js +217 -0
  14. package/dist/ai-engine/dataflow-detector.js.map +1 -0
  15. package/dist/ai-engine/dependency-detector.d.ts +52 -0
  16. package/dist/ai-engine/dependency-detector.d.ts.map +1 -0
  17. package/dist/ai-engine/dependency-detector.js +241 -0
  18. package/dist/ai-engine/dependency-detector.js.map +1 -0
  19. package/dist/ai-engine/edge-case-suggester.d.ts +63 -0
  20. package/dist/ai-engine/edge-case-suggester.d.ts.map +1 -0
  21. package/dist/ai-engine/edge-case-suggester.js +177 -0
  22. package/dist/ai-engine/edge-case-suggester.js.map +1 -0
  23. package/dist/ai-engine/index.d.ts +13 -0
  24. package/dist/ai-engine/index.d.ts.map +1 -0
  25. package/dist/ai-engine/index.js +13 -0
  26. package/dist/ai-engine/index.js.map +1 -0
  27. package/dist/analyzers/ai-failure-analyzer.d.ts +41 -0
  28. package/dist/analyzers/ai-failure-analyzer.d.ts.map +1 -0
  29. package/dist/analyzers/ai-failure-analyzer.js +220 -0
  30. package/dist/analyzers/ai-failure-analyzer.js.map +1 -0
  31. package/dist/analyzers/comparison-utils.d.ts +31 -0
  32. package/dist/analyzers/comparison-utils.d.ts.map +1 -0
  33. package/dist/analyzers/comparison-utils.js +85 -0
  34. package/dist/analyzers/comparison-utils.js.map +1 -0
  35. package/dist/analyzers/context-analyzer.d.ts +49 -0
  36. package/dist/analyzers/context-analyzer.d.ts.map +1 -0
  37. package/dist/analyzers/context-analyzer.js +292 -0
  38. package/dist/analyzers/context-analyzer.js.map +1 -0
  39. package/dist/analyzers/dependency-analyzer.d.ts +44 -0
  40. package/dist/analyzers/dependency-analyzer.d.ts.map +1 -0
  41. package/dist/analyzers/dependency-analyzer.js +313 -0
  42. package/dist/analyzers/dependency-analyzer.js.map +1 -0
  43. package/dist/analyzers/failure-analyzer.d.ts +122 -0
  44. package/dist/analyzers/failure-analyzer.d.ts.map +1 -0
  45. package/dist/analyzers/failure-analyzer.js +140 -0
  46. package/dist/analyzers/failure-analyzer.js.map +1 -0
  47. package/dist/analyzers/failure-detectors/index.d.ts +33 -0
  48. package/dist/analyzers/failure-detectors/index.d.ts.map +1 -0
  49. package/dist/analyzers/failure-detectors/index.js +164 -0
  50. package/dist/analyzers/failure-detectors/index.js.map +1 -0
  51. package/dist/analyzers/failure-discrepancy-correlator.d.ts +111 -0
  52. package/dist/analyzers/failure-discrepancy-correlator.d.ts.map +1 -0
  53. package/dist/analyzers/failure-discrepancy-correlator.js +202 -0
  54. package/dist/analyzers/failure-discrepancy-correlator.js.map +1 -0
  55. package/dist/analyzers/index.d.ts +10 -0
  56. package/dist/analyzers/index.d.ts.map +1 -0
  57. package/dist/analyzers/index.js +10 -0
  58. package/dist/analyzers/index.js.map +1 -0
  59. package/dist/analyzers/semantic-matcher.d.ts +123 -0
  60. package/dist/analyzers/semantic-matcher.d.ts.map +1 -0
  61. package/dist/analyzers/semantic-matcher.js +297 -0
  62. package/dist/analyzers/semantic-matcher.js.map +1 -0
  63. package/dist/analyzers/source-comparator.d.ts +177 -0
  64. package/dist/analyzers/source-comparator.d.ts.map +1 -0
  65. package/dist/analyzers/source-comparator.js +225 -0
  66. package/dist/analyzers/source-comparator.js.map +1 -0
  67. package/dist/business-rules/business-rules-analyzer.d.ts +44 -0
  68. package/dist/business-rules/business-rules-analyzer.d.ts.map +1 -0
  69. package/dist/business-rules/business-rules-analyzer.js +363 -0
  70. package/dist/business-rules/business-rules-analyzer.js.map +1 -0
  71. package/dist/business-rules/business-rules-generator.d.ts +78 -0
  72. package/dist/business-rules/business-rules-generator.d.ts.map +1 -0
  73. package/dist/business-rules/business-rules-generator.js +357 -0
  74. package/dist/business-rules/business-rules-generator.js.map +1 -0
  75. package/dist/business-rules/extractors/rule-extractors.d.ts +50 -0
  76. package/dist/business-rules/extractors/rule-extractors.d.ts.map +1 -0
  77. package/dist/business-rules/extractors/rule-extractors.js +189 -0
  78. package/dist/business-rules/extractors/rule-extractors.js.map +1 -0
  79. package/dist/business-rules/value-generators.d.ts +70 -0
  80. package/dist/business-rules/value-generators.d.ts.map +1 -0
  81. package/dist/business-rules/value-generators.js +142 -0
  82. package/dist/business-rules/value-generators.js.map +1 -0
  83. package/dist/executor/auth-providers/auth-header-builder.d.ts +16 -0
  84. package/dist/executor/auth-providers/auth-header-builder.d.ts.map +1 -0
  85. package/dist/executor/auth-providers/auth-header-builder.js +47 -0
  86. package/dist/executor/auth-providers/auth-header-builder.js.map +1 -0
  87. package/dist/executor/auth-providers/oauth2-provider.d.ts +19 -0
  88. package/dist/executor/auth-providers/oauth2-provider.d.ts.map +1 -0
  89. package/dist/executor/auth-providers/oauth2-provider.js +114 -0
  90. package/dist/executor/auth-providers/oauth2-provider.js.map +1 -0
  91. package/dist/executor/http-client.d.ts +133 -0
  92. package/dist/executor/http-client.d.ts.map +1 -0
  93. package/dist/executor/http-client.js +172 -0
  94. package/dist/executor/http-client.js.map +1 -0
  95. package/dist/executor/http-request-builder.d.ts +69 -0
  96. package/dist/executor/http-request-builder.d.ts.map +1 -0
  97. package/dist/executor/http-request-builder.js +140 -0
  98. package/dist/executor/http-request-builder.js.map +1 -0
  99. package/dist/executor/http-response-parser.d.ts +28 -0
  100. package/dist/executor/http-response-parser.d.ts.map +1 -0
  101. package/dist/executor/http-response-parser.js +74 -0
  102. package/dist/executor/http-response-parser.js.map +1 -0
  103. package/dist/executor/response-handler.d.ts +66 -0
  104. package/dist/executor/response-handler.d.ts.map +1 -0
  105. package/dist/executor/response-handler.js +135 -0
  106. package/dist/executor/response-handler.js.map +1 -0
  107. package/dist/executor/result-processor.d.ts +27 -0
  108. package/dist/executor/result-processor.d.ts.map +1 -0
  109. package/dist/executor/result-processor.js +140 -0
  110. package/dist/executor/result-processor.js.map +1 -0
  111. package/dist/executor/result-utils.d.ts +21 -0
  112. package/dist/executor/result-utils.d.ts.map +1 -0
  113. package/dist/executor/result-utils.js +29 -0
  114. package/dist/executor/result-utils.js.map +1 -0
  115. package/dist/executor/test-executor.d.ts +49 -0
  116. package/dist/executor/test-executor.d.ts.map +1 -0
  117. package/dist/executor/test-executor.js +226 -0
  118. package/dist/executor/test-executor.js.map +1 -0
  119. package/dist/executor/test-runner.d.ts +85 -0
  120. package/dist/executor/test-runner.d.ts.map +1 -0
  121. package/dist/executor/test-runner.js +177 -0
  122. package/dist/executor/test-runner.js.map +1 -0
  123. package/dist/executor/token-detector/index.d.ts +7 -0
  124. package/dist/executor/token-detector/index.d.ts.map +1 -0
  125. package/dist/executor/token-detector/index.js +7 -0
  126. package/dist/executor/token-detector/index.js.map +1 -0
  127. package/dist/executor/token-detector/token-detector.d.ts +64 -0
  128. package/dist/executor/token-detector/token-detector.d.ts.map +1 -0
  129. package/dist/executor/token-detector/token-detector.js +140 -0
  130. package/dist/executor/token-detector/token-detector.js.map +1 -0
  131. package/dist/generators/business-rule-from-stories-generator.d.ts +30 -0
  132. package/dist/generators/business-rule-from-stories-generator.d.ts.map +1 -0
  133. package/dist/generators/business-rule-from-stories-generator.js +227 -0
  134. package/dist/generators/business-rule-from-stories-generator.js.map +1 -0
  135. package/dist/generators/data/ai-data-generator.d.ts +23 -0
  136. package/dist/generators/data/ai-data-generator.d.ts.map +1 -0
  137. package/dist/generators/data/ai-data-generator.js +41 -0
  138. package/dist/generators/data/ai-data-generator.js.map +1 -0
  139. package/dist/generators/data/base-generator.d.ts +121 -0
  140. package/dist/generators/data/base-generator.d.ts.map +1 -0
  141. package/dist/generators/data/base-generator.js +200 -0
  142. package/dist/generators/data/base-generator.js.map +1 -0
  143. package/dist/generators/data/heuristic-data-generator.d.ts +28 -0
  144. package/dist/generators/data/heuristic-data-generator.d.ts.map +1 -0
  145. package/dist/generators/data/heuristic-data-generator.js +49 -0
  146. package/dist/generators/data/heuristic-data-generator.js.map +1 -0
  147. package/dist/generators/data/index.d.ts +48 -0
  148. package/dist/generators/data/index.d.ts.map +1 -0
  149. package/dist/generators/data/index.js +201 -0
  150. package/dist/generators/data/index.js.map +1 -0
  151. package/dist/generators/data/schema-walker.d.ts +45 -0
  152. package/dist/generators/data/schema-walker.d.ts.map +1 -0
  153. package/dist/generators/data/schema-walker.js +103 -0
  154. package/dist/generators/data/schema-walker.js.map +1 -0
  155. package/dist/generators/data/type-strategies.d.ts +79 -0
  156. package/dist/generators/data/type-strategies.d.ts.map +1 -0
  157. package/dist/generators/data/type-strategies.js +394 -0
  158. package/dist/generators/data/type-strategies.js.map +1 -0
  159. package/dist/generators/data-generator.d.ts +11 -0
  160. package/dist/generators/data-generator.d.ts.map +1 -0
  161. package/dist/generators/data-generator.js +11 -0
  162. package/dist/generators/data-generator.js.map +1 -0
  163. package/dist/generators/edge-case-generator.d.ts +55 -0
  164. package/dist/generators/edge-case-generator.d.ts.map +1 -0
  165. package/dist/generators/edge-case-generator.js +327 -0
  166. package/dist/generators/edge-case-generator.js.map +1 -0
  167. package/dist/generators/edge-cases/boundary-analyzer.d.ts +26 -0
  168. package/dist/generators/edge-cases/boundary-analyzer.d.ts.map +1 -0
  169. package/dist/generators/edge-cases/boundary-analyzer.js +95 -0
  170. package/dist/generators/edge-cases/boundary-analyzer.js.map +1 -0
  171. package/dist/generators/error-case-generator.d.ts +11 -0
  172. package/dist/generators/error-case-generator.d.ts.map +1 -0
  173. package/dist/generators/error-case-generator.js +11 -0
  174. package/dist/generators/error-case-generator.js.map +1 -0
  175. package/dist/generators/errors/auth-error-strategy.d.ts +36 -0
  176. package/dist/generators/errors/auth-error-strategy.d.ts.map +1 -0
  177. package/dist/generators/errors/auth-error-strategy.js +118 -0
  178. package/dist/generators/errors/auth-error-strategy.js.map +1 -0
  179. package/dist/generators/errors/business-error-strategy.d.ts +44 -0
  180. package/dist/generators/errors/business-error-strategy.d.ts.map +1 -0
  181. package/dist/generators/errors/business-error-strategy.js +152 -0
  182. package/dist/generators/errors/business-error-strategy.js.map +1 -0
  183. package/dist/generators/errors/error-strategy-factory.d.ts +27 -0
  184. package/dist/generators/errors/error-strategy-factory.d.ts.map +1 -0
  185. package/dist/generators/errors/error-strategy-factory.js +47 -0
  186. package/dist/generators/errors/error-strategy-factory.js.map +1 -0
  187. package/dist/generators/errors/error-strategy.d.ts +62 -0
  188. package/dist/generators/errors/error-strategy.d.ts.map +1 -0
  189. package/dist/generators/errors/error-strategy.js +69 -0
  190. package/dist/generators/errors/error-strategy.js.map +1 -0
  191. package/dist/generators/errors/index.d.ts +23 -0
  192. package/dist/generators/errors/index.d.ts.map +1 -0
  193. package/dist/generators/errors/index.js +73 -0
  194. package/dist/generators/errors/index.js.map +1 -0
  195. package/dist/generators/errors/validation-error-strategy.d.ts +25 -0
  196. package/dist/generators/errors/validation-error-strategy.d.ts.map +1 -0
  197. package/dist/generators/errors/validation-error-strategy.js +214 -0
  198. package/dist/generators/errors/validation-error-strategy.js.map +1 -0
  199. package/dist/generators/happy-path-generator.d.ts +93 -0
  200. package/dist/generators/happy-path-generator.d.ts.map +1 -0
  201. package/dist/generators/happy-path-generator.js +275 -0
  202. package/dist/generators/happy-path-generator.js.map +1 -0
  203. package/dist/generators/test-enricher.d.ts +44 -0
  204. package/dist/generators/test-enricher.d.ts.map +1 -0
  205. package/dist/generators/test-enricher.js +109 -0
  206. package/dist/generators/test-enricher.js.map +1 -0
  207. package/dist/index.d.ts +9 -0
  208. package/dist/index.d.ts.map +1 -0
  209. package/dist/index.js +14 -0
  210. package/dist/index.js.map +1 -0
  211. package/dist/llm/ai-cache.d.ts +123 -0
  212. package/dist/llm/ai-cache.d.ts.map +1 -0
  213. package/dist/llm/ai-cache.js +220 -0
  214. package/dist/llm/ai-cache.js.map +1 -0
  215. package/dist/llm/ai-client.d.ts +92 -0
  216. package/dist/llm/ai-client.d.ts.map +1 -0
  217. package/dist/llm/ai-client.js +386 -0
  218. package/dist/llm/ai-client.js.map +1 -0
  219. package/dist/llm/data-generator-ai.d.ts +84 -0
  220. package/dist/llm/data-generator-ai.d.ts.map +1 -0
  221. package/dist/llm/data-generator-ai.js +284 -0
  222. package/dist/llm/data-generator-ai.js.map +1 -0
  223. package/dist/llm/index.d.ts +7 -0
  224. package/dist/llm/index.d.ts.map +1 -0
  225. package/dist/llm/index.js +7 -0
  226. package/dist/llm/index.js.map +1 -0
  227. package/dist/mcp/handlers/base-handler.d.ts +72 -0
  228. package/dist/mcp/handlers/base-handler.d.ts.map +1 -0
  229. package/dist/mcp/handlers/base-handler.js +86 -0
  230. package/dist/mcp/handlers/base-handler.js.map +1 -0
  231. package/dist/mcp/handlers/compare-sources.d.ts +91 -0
  232. package/dist/mcp/handlers/compare-sources.d.ts.map +1 -0
  233. package/dist/mcp/handlers/compare-sources.js +182 -0
  234. package/dist/mcp/handlers/compare-sources.js.map +1 -0
  235. package/dist/mcp/handlers/export-results.d.ts +53 -0
  236. package/dist/mcp/handlers/export-results.d.ts.map +1 -0
  237. package/dist/mcp/handlers/export-results.js +132 -0
  238. package/dist/mcp/handlers/export-results.js.map +1 -0
  239. package/dist/mcp/handlers/export-to-postman.d.ts +65 -0
  240. package/dist/mcp/handlers/export-to-postman.d.ts.map +1 -0
  241. package/dist/mcp/handlers/export-to-postman.js +128 -0
  242. package/dist/mcp/handlers/export-to-postman.js.map +1 -0
  243. package/dist/mcp/handlers/generate-tests.d.ts +74 -0
  244. package/dist/mcp/handlers/generate-tests.d.ts.map +1 -0
  245. package/dist/mcp/handlers/generate-tests.js +519 -0
  246. package/dist/mcp/handlers/generate-tests.js.map +1 -0
  247. package/dist/mcp/handlers/index.d.ts +13 -0
  248. package/dist/mcp/handlers/index.d.ts.map +1 -0
  249. package/dist/mcp/handlers/index.js +12 -0
  250. package/dist/mcp/handlers/index.js.map +1 -0
  251. package/dist/mcp/handlers/run-tests.d.ts +89 -0
  252. package/dist/mcp/handlers/run-tests.d.ts.map +1 -0
  253. package/dist/mcp/handlers/run-tests.js +233 -0
  254. package/dist/mcp/handlers/run-tests.js.map +1 -0
  255. package/dist/mcp/handlers/types.d.ts +61 -0
  256. package/dist/mcp/handlers/types.d.ts.map +1 -0
  257. package/dist/mcp/handlers/types.js +9 -0
  258. package/dist/mcp/handlers/types.js.map +1 -0
  259. package/dist/mcp/server.d.ts +64 -0
  260. package/dist/mcp/server.d.ts.map +1 -0
  261. package/dist/mcp/server.js +200 -0
  262. package/dist/mcp/server.js.map +1 -0
  263. package/dist/mcp/services/file-service.d.ts +66 -0
  264. package/dist/mcp/services/file-service.d.ts.map +1 -0
  265. package/dist/mcp/services/file-service.js +143 -0
  266. package/dist/mcp/services/file-service.js.map +1 -0
  267. package/dist/mcp/services/llm-service.d.ts +70 -0
  268. package/dist/mcp/services/llm-service.d.ts.map +1 -0
  269. package/dist/mcp/services/llm-service.js +189 -0
  270. package/dist/mcp/services/llm-service.js.map +1 -0
  271. package/dist/mcp/services/postman-service.d.ts +128 -0
  272. package/dist/mcp/services/postman-service.d.ts.map +1 -0
  273. package/dist/mcp/services/postman-service.js +266 -0
  274. package/dist/mcp/services/postman-service.js.map +1 -0
  275. package/dist/mcp/services/report-service.d.ts +81 -0
  276. package/dist/mcp/services/report-service.d.ts.map +1 -0
  277. package/dist/mcp/services/report-service.js +210 -0
  278. package/dist/mcp/services/report-service.js.map +1 -0
  279. package/dist/mcp/services/spec-service.d.ts +58 -0
  280. package/dist/mcp/services/spec-service.d.ts.map +1 -0
  281. package/dist/mcp/services/spec-service.js +140 -0
  282. package/dist/mcp/services/spec-service.js.map +1 -0
  283. package/dist/parsers/endpoint-extractor.d.ts +32 -0
  284. package/dist/parsers/endpoint-extractor.d.ts.map +1 -0
  285. package/dist/parsers/endpoint-extractor.js +160 -0
  286. package/dist/parsers/endpoint-extractor.js.map +1 -0
  287. package/dist/parsers/openapi-parser.d.ts +120 -0
  288. package/dist/parsers/openapi-parser.d.ts.map +1 -0
  289. package/dist/parsers/openapi-parser.js +257 -0
  290. package/dist/parsers/openapi-parser.js.map +1 -0
  291. package/dist/parsers/visitors/auth-visitor.d.ts +28 -0
  292. package/dist/parsers/visitors/auth-visitor.d.ts.map +1 -0
  293. package/dist/parsers/visitors/auth-visitor.js +116 -0
  294. package/dist/parsers/visitors/auth-visitor.js.map +1 -0
  295. package/dist/prd/index.d.ts +10 -0
  296. package/dist/prd/index.d.ts.map +1 -0
  297. package/dist/prd/index.js +10 -0
  298. package/dist/prd/index.js.map +1 -0
  299. package/dist/prd/prd-reader.d.ts +124 -0
  300. package/dist/prd/prd-reader.d.ts.map +1 -0
  301. package/dist/prd/prd-reader.js +308 -0
  302. package/dist/prd/prd-reader.js.map +1 -0
  303. package/dist/prd/prd-storage.d.ts +232 -0
  304. package/dist/prd/prd-storage.d.ts.map +1 -0
  305. package/dist/prd/prd-storage.js +129 -0
  306. package/dist/prd/prd-storage.js.map +1 -0
  307. package/dist/repairers/test-auto-repairer.d.ts +61 -0
  308. package/dist/repairers/test-auto-repairer.d.ts.map +1 -0
  309. package/dist/repairers/test-auto-repairer.js +213 -0
  310. package/dist/repairers/test-auto-repairer.js.map +1 -0
  311. package/dist/reporters/comparison-report-generator.d.ts +58 -0
  312. package/dist/reporters/comparison-report-generator.d.ts.map +1 -0
  313. package/dist/reporters/comparison-report-generator.js +369 -0
  314. package/dist/reporters/comparison-report-generator.js.map +1 -0
  315. package/dist/reporters/gherkin-formatter.d.ts +34 -0
  316. package/dist/reporters/gherkin-formatter.d.ts.map +1 -0
  317. package/dist/reporters/gherkin-formatter.js +231 -0
  318. package/dist/reporters/gherkin-formatter.js.map +1 -0
  319. package/dist/reporters/html-report-generator.d.ts +174 -0
  320. package/dist/reporters/html-report-generator.d.ts.map +1 -0
  321. package/dist/reporters/html-report-generator.js +194 -0
  322. package/dist/reporters/html-report-generator.js.map +1 -0
  323. package/dist/reporters/report-charts.d.ts +23 -0
  324. package/dist/reporters/report-charts.d.ts.map +1 -0
  325. package/dist/reporters/report-charts.js +182 -0
  326. package/dist/reporters/report-charts.js.map +1 -0
  327. package/dist/reporters/report-sections.d.ts +34 -0
  328. package/dist/reporters/report-sections.d.ts.map +1 -0
  329. package/dist/reporters/report-sections.js +481 -0
  330. package/dist/reporters/report-sections.js.map +1 -0
  331. package/dist/reporters/report-styles.d.ts +12 -0
  332. package/dist/reporters/report-styles.d.ts.map +1 -0
  333. package/dist/reporters/report-styles.js +412 -0
  334. package/dist/reporters/report-styles.js.map +1 -0
  335. package/dist/reporters/report-test-details.d.ts +56 -0
  336. package/dist/reporters/report-test-details.d.ts.map +1 -0
  337. package/dist/reporters/report-test-details.js +328 -0
  338. package/dist/reporters/report-test-details.js.map +1 -0
  339. package/dist/reporters/report-utils.d.ts +40 -0
  340. package/dist/reporters/report-utils.d.ts.map +1 -0
  341. package/dist/reporters/report-utils.js +163 -0
  342. package/dist/reporters/report-utils.js.map +1 -0
  343. package/dist/types/ai-config.d.ts +63 -0
  344. package/dist/types/ai-config.d.ts.map +1 -0
  345. package/dist/types/ai-config.js +79 -0
  346. package/dist/types/ai-config.js.map +1 -0
  347. package/dist/types/business-rules.d.ts +235 -0
  348. package/dist/types/business-rules.d.ts.map +1 -0
  349. package/dist/types/business-rules.js +6 -0
  350. package/dist/types/business-rules.js.map +1 -0
  351. package/dist/types/config.d.ts +106 -0
  352. package/dist/types/config.d.ts.map +1 -0
  353. package/dist/types/config.js +6 -0
  354. package/dist/types/config.js.map +1 -0
  355. package/dist/types/core.d.ts +72 -0
  356. package/dist/types/core.d.ts.map +1 -0
  357. package/dist/types/core.js +6 -0
  358. package/dist/types/core.js.map +1 -0
  359. package/dist/types/index.d.ts +17 -0
  360. package/dist/types/index.d.ts.map +1 -0
  361. package/dist/types/index.js +10 -0
  362. package/dist/types/index.js.map +1 -0
  363. package/dist/types/openapi.d.ts +139 -0
  364. package/dist/types/openapi.d.ts.map +1 -0
  365. package/dist/types/openapi.js +6 -0
  366. package/dist/types/openapi.js.map +1 -0
  367. package/dist/types/pact.d.ts +101 -0
  368. package/dist/types/pact.d.ts.map +1 -0
  369. package/dist/types/pact.js +6 -0
  370. package/dist/types/pact.js.map +1 -0
  371. package/dist/types/reporting.d.ts +93 -0
  372. package/dist/types/reporting.d.ts.map +1 -0
  373. package/dist/types/reporting.js +6 -0
  374. package/dist/types/reporting.js.map +1 -0
  375. package/dist/types/test-case.d.ts +233 -0
  376. package/dist/types/test-case.d.ts.map +1 -0
  377. package/dist/types/test-case.js +6 -0
  378. package/dist/types/test-case.js.map +1 -0
  379. package/dist/types/test-execution.d.ts +80 -0
  380. package/dist/types/test-execution.d.ts.map +1 -0
  381. package/dist/types/test-execution.js +6 -0
  382. package/dist/types/test-execution.js.map +1 -0
  383. package/dist/utils/auth-generator.d.ts +30 -0
  384. package/dist/utils/auth-generator.d.ts.map +1 -0
  385. package/dist/utils/auth-generator.js +68 -0
  386. package/dist/utils/auth-generator.js.map +1 -0
  387. package/dist/utils/config.d.ts +181 -0
  388. package/dist/utils/config.d.ts.map +1 -0
  389. package/dist/utils/config.js +141 -0
  390. package/dist/utils/config.js.map +1 -0
  391. package/dist/utils/coverage-calculator.d.ts +81 -0
  392. package/dist/utils/coverage-calculator.d.ts.map +1 -0
  393. package/dist/utils/coverage-calculator.js +134 -0
  394. package/dist/utils/coverage-calculator.js.map +1 -0
  395. package/dist/utils/data-loader.d.ts +52 -0
  396. package/dist/utils/data-loader.d.ts.map +1 -0
  397. package/dist/utils/data-loader.js +192 -0
  398. package/dist/utils/data-loader.js.map +1 -0
  399. package/dist/utils/errors.d.ts +167 -0
  400. package/dist/utils/errors.d.ts.map +1 -0
  401. package/dist/utils/errors.js +257 -0
  402. package/dist/utils/errors.js.map +1 -0
  403. package/dist/utils/logger.d.ts +220 -0
  404. package/dist/utils/logger.d.ts.map +1 -0
  405. package/dist/utils/logger.js +325 -0
  406. package/dist/utils/logger.js.map +1 -0
  407. package/dist/utils/openapi-discovery.d.ts +31 -0
  408. package/dist/utils/openapi-discovery.d.ts.map +1 -0
  409. package/dist/utils/openapi-discovery.js +322 -0
  410. package/dist/utils/openapi-discovery.js.map +1 -0
  411. package/dist/utils/path-resolver.d.ts +101 -0
  412. package/dist/utils/path-resolver.d.ts.map +1 -0
  413. package/dist/utils/path-resolver.js +167 -0
  414. package/dist/utils/path-resolver.js.map +1 -0
  415. package/dist/utils/resilience.d.ts +181 -0
  416. package/dist/utils/resilience.d.ts.map +1 -0
  417. package/dist/utils/resilience.js +269 -0
  418. package/dist/utils/resilience.js.map +1 -0
  419. package/dist/validators/openapi-validator.d.ts +198 -0
  420. package/dist/validators/openapi-validator.d.ts.map +1 -0
  421. package/dist/validators/openapi-validator.js +349 -0
  422. package/dist/validators/openapi-validator.js.map +1 -0
  423. package/dist/validators/response-matcher.d.ts +84 -0
  424. package/dist/validators/response-matcher.d.ts.map +1 -0
  425. package/dist/validators/response-matcher.js +234 -0
  426. package/dist/validators/response-matcher.js.map +1 -0
  427. package/dist/validators/schema-validator.d.ts +174 -0
  428. package/dist/validators/schema-validator.d.ts.map +1 -0
  429. package/dist/validators/schema-validator.js +340 -0
  430. package/dist/validators/schema-validator.js.map +1 -0
  431. package/package.json +76 -0
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Comparison Report Generator
3
+ *
4
+ * Generates professional HTML reports for source comparison results
5
+ * with visual matrix showing endpoints vs sources (OpenAPI/Code/PRD)
6
+ *
7
+ * @module reporters/comparison-report-generator
8
+ */
9
+ import type { ComparisonResult } from '../analyzers/source-comparator.js';
10
+ /**
11
+ * Generates professional HTML report for source comparison
12
+ *
13
+ * Features:
14
+ * - Matrix table: Endpoints vs Sources
15
+ * - Color-coded discrepancies by priority
16
+ * - Summary statistics
17
+ * - Semantic analysis (AI-powered) section
18
+ * - Tailwind CSS styling
19
+ *
20
+ * @param comparison - Comparison result (may include semanticAnalysis)
21
+ * @returns HTML string
22
+ */
23
+ export declare function generateComparisonHtmlReport(comparison: ComparisonResult & {
24
+ semanticAnalysis?: {
25
+ semanticMatches: Array<{
26
+ openApiEndpoint: {
27
+ method: string;
28
+ path: string;
29
+ };
30
+ codeEndpoint: {
31
+ method: string;
32
+ path: string;
33
+ };
34
+ similarity: number;
35
+ explanation: string;
36
+ confidence: string;
37
+ reasons: string[];
38
+ }>;
39
+ semanticMismatches: Array<{
40
+ type: string;
41
+ endpoint: {
42
+ method: string;
43
+ path: string;
44
+ };
45
+ description: string;
46
+ expected: string;
47
+ actual: string;
48
+ severity: string;
49
+ suggestion: string;
50
+ }>;
51
+ businessRuleMappings: Array<{
52
+ rule: string;
53
+ mappedTo: string[];
54
+ confidence: number;
55
+ }>;
56
+ };
57
+ }): string;
58
+ //# sourceMappingURL=comparison-report-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comparison-report-generator.d.ts","sourceRoot":"","sources":["../../src/reporters/comparison-report-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAA+B,MAAM,mCAAmC,CAAC;AAEvG;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,gBAAgB,GAAG;IAC1E,gBAAgB,CAAC,EAAE;QACjB,eAAe,EAAE,KAAK,CAAC;YACrB,eAAe,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAA;aAAE,CAAC;YAClD,YAAY,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAA;aAAE,CAAC;YAC/C,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC;YACnB,OAAO,EAAE,MAAM,EAAE,CAAC;SACnB,CAAC,CAAC;QACH,kBAAkB,EAAE,KAAK,CAAC;YACxB,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAA;aAAE,CAAC;YAC3C,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,EAAE,MAAM,CAAC;YACjB,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC,CAAC;QACH,oBAAoB,EAAE,KAAK,CAAC;YAC1B,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,EAAE,CAAC;YACnB,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC,CAAC;KACJ,CAAC;CACH,GAAG,MAAM,CAsOT"}
@@ -0,0 +1,369 @@
1
+ /**
2
+ * Comparison Report Generator
3
+ *
4
+ * Generates professional HTML reports for source comparison results
5
+ * with visual matrix showing endpoints vs sources (OpenAPI/Code/PRD)
6
+ *
7
+ * @module reporters/comparison-report-generator
8
+ */
9
+ /**
10
+ * Generates professional HTML report for source comparison
11
+ *
12
+ * Features:
13
+ * - Matrix table: Endpoints vs Sources
14
+ * - Color-coded discrepancies by priority
15
+ * - Summary statistics
16
+ * - Semantic analysis (AI-powered) section
17
+ * - Tailwind CSS styling
18
+ *
19
+ * @param comparison - Comparison result (may include semanticAnalysis)
20
+ * @returns HTML string
21
+ */
22
+ export function generateComparisonHtmlReport(comparison) {
23
+ const { summary, allEndpoints, discrepancies, timestamp, semanticAnalysis } = comparison;
24
+ return `<!DOCTYPE html>
25
+ <html lang="es">
26
+ <head>
27
+ <meta charset="UTF-8">
28
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
29
+ <title>Source Comparison Report</title>
30
+ <script src="https://cdn.tailwindcss.com"></script>
31
+ </head>
32
+ <body class="bg-gradient-to-br from-gray-50 to-gray-100 min-h-screen py-8">
33
+ <!-- Header -->
34
+ <header class="mb-8">
35
+ <div class="max-w-7xl mx-auto px-4">
36
+ <h1 class="text-4xl font-bold text-gray-900 mb-2">🔍 Source Comparison Report</h1>
37
+ <p class="text-gray-600">Generated on ${new Date(timestamp).toLocaleString()}</p>
38
+ </div>
39
+ </header>
40
+
41
+ <!-- Summary Cards -->
42
+ <section class="max-w-7xl mx-auto px-4 mb-8">
43
+ <div class="grid grid-cols-1 md:grid-cols-4 gap-4">
44
+ <!-- Total Endpoints Card -->
45
+ <div class="bg-white rounded-lg shadow p-6">
46
+ <div class="text-sm font-medium text-gray-600 mb-2">Total Endpoints</div>
47
+ <div class="text-3xl font-bold text-blue-600">${summary.totalEndpointsInSpec + summary.totalEndpointsInCode}</div>
48
+ <div class="text-xs text-gray-500 mt-2">
49
+ Spec: ${summary.totalEndpointsInSpec} | Code: ${summary.totalEndpointsInCode}
50
+ </div>
51
+ </div>
52
+
53
+ <!-- Matching Card -->
54
+ <div class="bg-white rounded-lg shadow p-6">
55
+ <div class="text-sm font-medium text-gray-600 mb-2">Aligned</div>
56
+ <div class="text-3xl font-bold text-green-600">${summary.matchingEndpoints}</div>
57
+ <div class="text-xs text-gray-500 mt-2">
58
+ ${((summary.matchingEndpoints / (summary.totalEndpointsInSpec || 1)) * 100).toFixed(0)}% coverage
59
+ </div>
60
+ </div>
61
+
62
+ <!-- Discrepancies Card -->
63
+ <div class="bg-white rounded-lg shadow p-6">
64
+ <div class="text-sm font-medium text-gray-600 mb-2">Discrepancies</div>
65
+ <div class="text-3xl font-bold text-red-600">${summary.discrepanciesFound}</div>
66
+ <div class="text-xs text-gray-500 mt-2">
67
+ Errors: ${summary.errors} | Warnings: ${summary.warnings}
68
+ </div>
69
+ </div>
70
+
71
+ <!-- Priority Card -->
72
+ <div class="bg-white rounded-lg shadow p-6">
73
+ <div class="text-sm font-medium text-gray-600 mb-2">Priority Breakdown</div>
74
+ <div class="flex items-center gap-2 mt-2">
75
+ <span class="px-2 py-1 text-xs font-bold bg-red-600 text-white rounded">${summary.critical}</span>
76
+ <span class="px-2 py-1 text-xs font-bold bg-orange-500 text-white rounded">${summary.high}</span>
77
+ <span class="px-2 py-1 text-xs font-bold bg-yellow-500 text-white rounded">${summary.medium}</span>
78
+ <span class="px-2 py-1 text-xs font-bold bg-blue-500 text-white rounded">${summary.low}</span>
79
+ </div>
80
+ <div class="text-xs text-gray-500 mt-2">Critical | High | Medium | Low</div>
81
+ </div>
82
+ </div>
83
+ </section>
84
+
85
+ <!-- Endpoints Matrix -->
86
+ <section class="max-w-7xl mx-auto px-4 mb-8">
87
+ <div class="bg-white rounded-lg shadow overflow-hidden">
88
+ <div class="px-6 py-4 bg-gray-50 border-b border-gray-200">
89
+ <h2 class="text-xl font-bold text-gray-900">📊 Endpoints Matrix</h2>
90
+ <p class="text-sm text-gray-600 mt-1">Coverage across sources (OpenAPI, Code, PRD)</p>
91
+ </div>
92
+ <div class="overflow-x-auto">
93
+ <table class="min-w-full divide-y divide-gray-200">
94
+ <thead class="bg-gray-50">
95
+ <tr>
96
+ <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Endpoint</th>
97
+ <th class="px-6 py-3 text-center text-xs font-medium text-gray-500 uppercase tracking-wider">OpenAPI</th>
98
+ <th class="px-6 py-3 text-center text-xs font-medium text-gray-500 uppercase tracking-wider">Code</th>
99
+ <th class="px-6 py-3 text-center text-xs font-medium text-gray-500 uppercase tracking-wider">PRD</th>
100
+ <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Status</th>
101
+ </tr>
102
+ </thead>
103
+ <tbody class="bg-white divide-y divide-gray-200">
104
+ ${allEndpoints.map(endpoint => generateEndpointRow(endpoint, discrepancies)).join('')}
105
+ </tbody>
106
+ </table>
107
+ </div>
108
+ </div>
109
+ </section>
110
+
111
+ <!-- Discrepancies List -->
112
+ ${discrepancies.length > 0 ? `
113
+ <section class="max-w-7xl mx-auto px-4 mb-8">
114
+ <div class="bg-white rounded-lg shadow overflow-hidden">
115
+ <div class="px-6 py-4 bg-gray-50 border-b border-gray-200">
116
+ <h2 class="text-xl font-bold text-gray-900">⚠️ Discrepancies (${discrepancies.length})</h2>
117
+ <p class="text-sm text-gray-600 mt-1">Ordered by priority (critical first)</p>
118
+ </div>
119
+ <div class="divide-y divide-gray-200">
120
+ ${discrepancies.map(disc => generateDiscrepancyItem(disc)).join('')}
121
+ </div>
122
+ </div>
123
+ </section>
124
+ ` : ''}
125
+
126
+ ${semanticAnalysis && (semanticAnalysis.semanticMatches.length > 0 || semanticAnalysis.semanticMismatches.length > 0 || semanticAnalysis.businessRuleMappings.length > 0) ? `
127
+ <!-- Semantic Analysis Section (AI-Powered) -->
128
+ <section class="max-w-7xl mx-auto px-4 mb-8">
129
+ <div class="bg-gradient-to-r from-purple-50 to-indigo-50 rounded-lg shadow overflow-hidden border-2 border-purple-200">
130
+ <div class="px-6 py-4 bg-gradient-to-r from-purple-600 to-indigo-600">
131
+ <h2 class="text-xl font-bold text-white flex items-center gap-2">
132
+ <span>🧠</span> AI-Powered Semantic Analysis
133
+ </h2>
134
+ <p class="text-sm text-purple-100 mt-1">Advanced pattern matching beyond simple string comparison</p>
135
+ </div>
136
+
137
+ ${semanticAnalysis.semanticMatches.length > 0 ? `
138
+ <!-- Semantic Matches -->
139
+ <div class="px-6 py-4 border-b border-purple-200">
140
+ <h3 class="text-lg font-bold text-gray-900 mb-3 flex items-center gap-2">
141
+ <span>🎯</span> Semantic Endpoint Matches (${semanticAnalysis.semanticMatches.length})
142
+ </h3>
143
+ <p class="text-sm text-gray-600 mb-4">These endpoints don't match syntactically but are semantically equivalent:</p>
144
+ <div class="space-y-3">
145
+ ${semanticAnalysis.semanticMatches.map(match => `
146
+ <div class="bg-white border-l-4 border-purple-500 rounded-r-lg p-4 shadow-sm">
147
+ <div class="flex items-center justify-between mb-2">
148
+ <div class="flex items-center gap-2">
149
+ <span class="px-2 py-1 text-xs font-bold rounded ${getMethodColorClass(match.openApiEndpoint.method)}">${match.openApiEndpoint.method}</span>
150
+ <span class="text-sm font-mono text-gray-700">${match.openApiEndpoint.path}</span>
151
+ </div>
152
+ <div class="flex items-center gap-2">
153
+ <span class="text-2xl">≈</span>
154
+ </div>
155
+ <div class="flex items-center gap-2">
156
+ <span class="px-2 py-1 text-xs font-bold rounded ${getMethodColorClass(match.codeEndpoint.method)}">${match.codeEndpoint.method}</span>
157
+ <span class="text-sm font-mono text-gray-700">${match.codeEndpoint.path}</span>
158
+ </div>
159
+ </div>
160
+ <div class="flex items-center gap-2 mb-2">
161
+ <span class="px-2 py-1 text-xs font-semibold rounded ${match.confidence === 'high' ? 'bg-green-100 text-green-800' : match.confidence === 'medium' ? 'bg-yellow-100 text-yellow-800' : 'bg-gray-100 text-gray-800'}">
162
+ ${match.confidence.toUpperCase()} Confidence
163
+ </span>
164
+ <span class="text-xs text-gray-600">Similarity: ${(match.similarity * 100).toFixed(0)}%</span>
165
+ </div>
166
+ <p class="text-sm text-gray-700 mb-2"><strong>💡 Explanation:</strong> ${match.explanation}</p>
167
+ ${match.reasons && match.reasons.length > 0 ? `
168
+ <div class="mt-2">
169
+ <p class="text-xs font-semibold text-gray-600 mb-1">Reasons:</p>
170
+ <ul class="list-disc list-inside text-xs text-gray-600">
171
+ ${match.reasons.map(reason => `<li>${reason}</li>`).join('')}
172
+ </ul>
173
+ </div>
174
+ ` : ''}
175
+ </div>
176
+ `).join('')}
177
+ </div>
178
+ </div>
179
+ ` : ''}
180
+
181
+ ${semanticAnalysis.semanticMismatches.length > 0 ? `
182
+ <!-- Semantic Mismatches -->
183
+ <div class="px-6 py-4 border-b border-purple-200">
184
+ <h3 class="text-lg font-bold text-gray-900 mb-3 flex items-center gap-2">
185
+ <span>⚙️</span> Semantic Parameter Mismatches (${semanticAnalysis.semanticMismatches.length})
186
+ </h3>
187
+ <p class="text-sm text-gray-600 mb-4">Parameter naming inconsistencies detected by AI:</p>
188
+ <div class="space-y-3">
189
+ ${semanticAnalysis.semanticMismatches.map(mismatch => `
190
+ <div class="bg-white border-l-4 border-orange-500 rounded-r-lg p-4 shadow-sm">
191
+ <div class="flex items-center gap-2 mb-2">
192
+ <span class="px-2 py-1 text-xs font-bold rounded ${getMethodColorClass(mismatch.endpoint.method)}">${mismatch.endpoint.method}</span>
193
+ <span class="text-sm font-mono text-gray-700">${mismatch.endpoint.path}</span>
194
+ <span class="px-2 py-1 text-xs font-semibold rounded ${mismatch.severity === 'error' ? 'bg-red-100 text-red-800' : 'bg-yellow-100 text-yellow-800'}">${mismatch.severity.toUpperCase()}</span>
195
+ </div>
196
+ <p class="text-sm text-gray-700 mb-2">${mismatch.description}</p>
197
+ <div class="flex items-center gap-2 mb-2 text-xs">
198
+ <span class="font-semibold text-gray-600">Expected:</span>
199
+ <code class="px-2 py-1 bg-gray-100 rounded">${mismatch.expected}</code>
200
+ <span class="text-gray-400">→</span>
201
+ <span class="font-semibold text-gray-600">Actual:</span>
202
+ <code class="px-2 py-1 bg-gray-100 rounded">${mismatch.actual}</code>
203
+ </div>
204
+ <div class="bg-blue-50 border-l-4 border-blue-400 p-3 mt-2">
205
+ <p class="text-sm text-blue-800"><strong>💡 Suggestion:</strong> ${mismatch.suggestion}</p>
206
+ </div>
207
+ </div>
208
+ `).join('')}
209
+ </div>
210
+ </div>
211
+ ` : ''}
212
+
213
+ ${semanticAnalysis.businessRuleMappings.length > 0 ? `
214
+ <!-- Business Rule Mappings -->
215
+ <div class="px-6 py-4">
216
+ <h3 class="text-lg font-bold text-gray-900 mb-3 flex items-center gap-2">
217
+ <span>📋</span> Business Rule Mappings (${semanticAnalysis.businessRuleMappings.length})
218
+ </h3>
219
+ <p class="text-sm text-gray-600 mb-4">AI-detected connections between PRD rules and code implementation:</p>
220
+ <div class="space-y-3">
221
+ ${semanticAnalysis.businessRuleMappings.map(mapping => `
222
+ <div class="bg-white border-l-4 border-green-500 rounded-r-lg p-4 shadow-sm">
223
+ <div class="flex items-center justify-between mb-2">
224
+ <p class="font-semibold text-gray-900">${mapping.rule}</p>
225
+ <span class="px-2 py-1 text-xs font-semibold rounded ${mapping.confidence >= 0.7 ? 'bg-green-100 text-green-800' : 'bg-yellow-100 text-yellow-800'}">
226
+ ${(mapping.confidence * 100).toFixed(0)}% Confidence
227
+ </span>
228
+ </div>
229
+ <p class="text-sm text-gray-600 mb-2">Mapped to ${mapping.mappedTo.length} endpoint(s):</p>
230
+ <div class="flex flex-wrap gap-2">
231
+ ${mapping.mappedTo.map(endpoint => `
232
+ <span class="px-2 py-1 text-xs font-mono bg-gray-100 text-gray-700 rounded">${endpoint}</span>
233
+ `).join('')}
234
+ </div>
235
+ </div>
236
+ `).join('')}
237
+ </div>
238
+ </div>
239
+ ` : ''}
240
+ </div>
241
+ </section>
242
+ ` : ''}
243
+
244
+ <!-- Footer -->
245
+ <footer class="max-w-7xl mx-auto px-4 mt-12 text-center text-sm text-gray-600">
246
+ <p>Generated by OpenAPI Contract Tester MCP</p>
247
+ <p class="mt-1">Professional deliverable for stakeholders and technical teams</p>
248
+ </footer>
249
+ </body>
250
+ </html>`;
251
+ }
252
+ /**
253
+ * Generates a table row for an endpoint
254
+ */
255
+ function generateEndpointRow(endpoint, discrepancies) {
256
+ const { method, path, inOpenApi, inCode, inPrd } = endpoint;
257
+ // Find related discrepancies
258
+ const relatedDisc = discrepancies.find(d => d.endpoint?.method === method && d.endpoint?.path === path);
259
+ // Determine status
260
+ let statusHtml;
261
+ let statusBg;
262
+ if (inOpenApi && inCode && inPrd) {
263
+ statusHtml = '✅ Fully Aligned';
264
+ statusBg = 'bg-green-100 text-green-800';
265
+ }
266
+ else if (inOpenApi && inCode) {
267
+ statusHtml = '✓ Aligned';
268
+ statusBg = 'bg-green-100 text-green-800';
269
+ }
270
+ else if (!inCode && inOpenApi) {
271
+ statusHtml = '⚠ Not Implemented';
272
+ statusBg = 'bg-red-100 text-red-800';
273
+ }
274
+ else if (!inOpenApi && inCode) {
275
+ statusHtml = '⚠ Not Documented';
276
+ statusBg = 'bg-yellow-100 text-yellow-800';
277
+ }
278
+ else {
279
+ statusHtml = '❓ Partial';
280
+ statusBg = 'bg-gray-100 text-gray-800';
281
+ }
282
+ return `
283
+ <tr class="hover:bg-gray-50">
284
+ <td class="px-6 py-4 whitespace-nowrap">
285
+ <div class="flex items-center gap-2">
286
+ <span class="px-2 py-1 text-xs font-semibold rounded ${getMethodColorClass(method)}">${method}</span>
287
+ <span class="text-sm font-mono text-gray-700">${path}</span>
288
+ ${relatedDisc ? `<span class="ml-2 px-2 py-1 text-xs font-bold rounded ${getPriorityBadgeClass(relatedDisc.priority)}">${relatedDisc.priority}</span>` : ''}
289
+ </div>
290
+ </td>
291
+ <td class="px-6 py-4 whitespace-nowrap text-center">
292
+ ${inOpenApi ? '<span class="text-2xl">✅</span>' : '<span class="text-2xl text-gray-300">—</span>'}
293
+ </td>
294
+ <td class="px-6 py-4 whitespace-nowrap text-center">
295
+ ${inCode ? '<span class="text-2xl">✅</span>' : '<span class="text-2xl text-gray-300">—</span>'}
296
+ </td>
297
+ <td class="px-6 py-4 whitespace-nowrap text-center">
298
+ ${inPrd ? '<span class="text-2xl">✅</span>' : '<span class="text-2xl text-gray-300">—</span>'}
299
+ </td>
300
+ <td class="px-6 py-4 whitespace-nowrap">
301
+ <span class="px-3 py-1 inline-flex text-xs leading-5 font-semibold rounded-full ${statusBg}">${statusHtml}</span>
302
+ </td>
303
+ </tr>
304
+ `;
305
+ }
306
+ /**
307
+ * Generates a discrepancy item
308
+ */
309
+ function generateDiscrepancyItem(disc) {
310
+ const priorityBadge = getPriorityBadgeClass(disc.priority);
311
+ const severityIcon = disc.severity === 'error' ? '🔴' : disc.severity === 'warning' ? '🟡' : 'ℹ️';
312
+ return `
313
+ <div class="px-6 py-4">
314
+ <div class="flex items-start gap-3">
315
+ <div class="flex-shrink-0 text-2xl">${severityIcon}</div>
316
+ <div class="flex-grow">
317
+ <div class="flex items-center gap-2 mb-2">
318
+ <span class="px-2 py-1 text-xs font-bold rounded ${priorityBadge}">${disc.priority.toUpperCase()}</span>
319
+ <span class="text-sm font-semibold text-gray-600">${disc.type.replace(/_/g, ' ').toUpperCase()}</span>
320
+ ${disc.endpoint ? `<span class="text-sm font-mono text-gray-700">${disc.endpoint.method} ${disc.endpoint.path}</span>` : ''}
321
+ </div>
322
+ <p class="text-gray-800 mb-2">${disc.description}</p>
323
+ ${disc.suggestion ? `
324
+ <div class="bg-blue-50 border-l-4 border-blue-400 p-3 mt-2">
325
+ <p class="text-sm text-blue-800"><strong>💡 Suggestion:</strong> ${disc.suggestion}</p>
326
+ </div>
327
+ ` : ''}
328
+ </div>
329
+ </div>
330
+ </div>
331
+ `;
332
+ }
333
+ /**
334
+ * Get Tailwind CSS color classes for HTTP method badges
335
+ */
336
+ function getMethodColorClass(method) {
337
+ switch (method.toUpperCase()) {
338
+ case 'GET':
339
+ return 'bg-blue-100 text-blue-800';
340
+ case 'POST':
341
+ return 'bg-green-100 text-green-800';
342
+ case 'PUT':
343
+ return 'bg-yellow-100 text-yellow-800';
344
+ case 'PATCH':
345
+ return 'bg-orange-100 text-orange-800';
346
+ case 'DELETE':
347
+ return 'bg-red-100 text-red-800';
348
+ default:
349
+ return 'bg-gray-100 text-gray-800';
350
+ }
351
+ }
352
+ /**
353
+ * Get Tailwind CSS classes for priority badges
354
+ */
355
+ function getPriorityBadgeClass(priority) {
356
+ switch (priority.toLowerCase()) {
357
+ case 'critical':
358
+ return 'bg-red-600 text-white';
359
+ case 'high':
360
+ return 'bg-orange-500 text-white';
361
+ case 'medium':
362
+ return 'bg-yellow-500 text-white';
363
+ case 'low':
364
+ return 'bg-blue-500 text-white';
365
+ default:
366
+ return 'bg-gray-500 text-white';
367
+ }
368
+ }
369
+ //# sourceMappingURL=comparison-report-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comparison-report-generator.js","sourceRoot":"","sources":["../../src/reporters/comparison-report-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Gherkin Formatter - Converts test cases to BDD Gherkin format
3
+ *
4
+ * Generates human-readable Given/When/Then scenarios from test cases
5
+ * for stakeholder-friendly reporting.
6
+ *
7
+ * @module reporters/gherkin-formatter
8
+ */
9
+ import type { TestResult } from './html-report-generator.js';
10
+ export interface GherkinScenario {
11
+ title: string;
12
+ steps: GherkinStep[];
13
+ status: 'passed' | 'failed' | 'skipped';
14
+ tags: string[];
15
+ }
16
+ export interface GherkinStep {
17
+ keyword: 'Given' | 'When' | 'Then' | 'And' | 'But';
18
+ text: string;
19
+ dataTable?: Array<{
20
+ key: string;
21
+ value: string;
22
+ }>;
23
+ status?: 'passed' | 'failed' | 'skipped';
24
+ error?: string;
25
+ }
26
+ /**
27
+ * Converts a test result to Gherkin scenario format
28
+ */
29
+ export declare function toGherkinScenario(test: TestResult): GherkinScenario;
30
+ /**
31
+ * Renders a Gherkin scenario as HTML
32
+ */
33
+ export declare function renderGherkinScenarioHTML(scenario: GherkinScenario): string;
34
+ //# sourceMappingURL=gherkin-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gherkin-formatter.d.ts","sourceRoot":"","sources":["../../src/reporters/gherkin-formatter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,CA8BnE;AA6ID;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAoB3E"}