@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,227 @@
1
+ /**
2
+ * Business Rule Generator from User Stories
3
+ *
4
+ * Converts user stories (natural language) into executable test cases
5
+ * using AI to interpret the business rules and map them to API endpoints.
6
+ *
7
+ * @module generators/business-rule-from-stories-generator
8
+ */
9
+ import { callLLM } from '../llm/ai-client.js';
10
+ import { HeuristicDataGenerator } from './data/heuristic-data-generator.js';
11
+ import { generateAuthHeaders } from '../utils/auth-generator.js';
12
+ import { createLogger } from '../utils/logger.js';
13
+ const log = createLogger('business-rule-generator');
14
+ /**
15
+ * Generates test cases from user stories using AI
16
+ *
17
+ * @param userStories - Plain text user stories or business rules
18
+ * @param endpoints - Available API endpoints
19
+ * @param options - Generation options
20
+ * @returns Array of test cases validating the business rules
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const tests = await generateFromUserStories(
25
+ * "Usuario no puede transferir más de $1,000 sin 2FA",
26
+ * endpoints,
27
+ * { aiLevel: 'smart' }
28
+ * );
29
+ * ```
30
+ */
31
+ export async function generateFromUserStories(userStories, endpoints, options = { aiLevel: 'smart' }) {
32
+ log.info('Generating business rule tests from user stories', {
33
+ userStoriesLength: userStories.length,
34
+ endpointCount: endpoints.length,
35
+ aiLevel: options.aiLevel
36
+ });
37
+ try {
38
+ // Build AI prompt
39
+ const prompt = buildUserStoryPrompt(userStories, endpoints);
40
+ // Call LLM
41
+ const result = await callLLM(prompt, {
42
+ maxTokens: 2048,
43
+ temperature: 0.3
44
+ });
45
+ if (!result.success || !result.text) {
46
+ log.warn('AI call failed, returning empty test array', {
47
+ error: result.error
48
+ });
49
+ return [];
50
+ }
51
+ // Parse AI response
52
+ const suggestions = parseAIResponse(result.text);
53
+ if (suggestions.length === 0) {
54
+ log.warn('No business rule suggestions generated');
55
+ return [];
56
+ }
57
+ // Convert suggestions to TestCase[]
58
+ const tests = suggestionsToTests(suggestions, endpoints);
59
+ log.info('Business rule tests generated', {
60
+ suggestionsCount: suggestions.length,
61
+ testsCount: tests.length
62
+ });
63
+ return tests;
64
+ }
65
+ catch (error) {
66
+ log.error('Business rule generation failed', {
67
+ error: error instanceof Error ? error.message : String(error)
68
+ });
69
+ return [];
70
+ }
71
+ }
72
+ /**
73
+ * Builds the AI prompt for user story interpretation
74
+ */
75
+ function buildUserStoryPrompt(userStories, endpoints) {
76
+ const endpointSummary = endpoints.slice(0, 20).map(e => ({
77
+ method: e.method,
78
+ path: e.path,
79
+ summary: e.operation?.summary || e.operation?.description,
80
+ hasRequestBody: !!e.requestBody,
81
+ requiredFields: extractRequiredFields(e)
82
+ }));
83
+ return `Map user stories to API test cases that validate business rules.
84
+
85
+ USER STORIES:
86
+ ${userStories}
87
+
88
+ AVAILABLE ENDPOINTS:
89
+ ${JSON.stringify(endpointSummary, null, 2)}
90
+
91
+ INSTRUCTIONS:
92
+ For each business rule in the user stories, create test cases that validate it.
93
+
94
+ Guidelines:
95
+ 1. Identify which endpoint(s) the rule applies to
96
+ 2. Create specific test scenarios (both valid and invalid cases)
97
+ 3. Include bodyHints with concrete values that trigger the rule
98
+ 4. Specify the expected HTTP status code and error message
99
+ 5. Explain why this test validates the business rule
100
+
101
+ Return JSON array:
102
+ [
103
+ {
104
+ "storyId": "rule-001",
105
+ "testName": "Transfer over $1000 without 2FA should fail",
106
+ "endpoint": { "method": "POST", "path": "/api/transfers" },
107
+ "bodyHints": { "amount": 1001, "twoFactorCode": null },
108
+ "expectedStatus": 403,
109
+ "expectedError": "2FA required for amounts over $1,000",
110
+ "rationale": "Validates transfer limit security rule"
111
+ }
112
+ ]
113
+
114
+ Respond with ONLY the JSON array, no markdown formatting.`;
115
+ }
116
+ /**
117
+ * Extracts required fields from an endpoint's request body
118
+ */
119
+ function extractRequiredFields(endpoint) {
120
+ if (!endpoint.requestBody || endpoint.requestBody.type !== 'object') {
121
+ return [];
122
+ }
123
+ return endpoint.requestBody.required || [];
124
+ }
125
+ /**
126
+ * Parses the AI response text into BusinessRuleSuggestion[]
127
+ */
128
+ function parseAIResponse(text) {
129
+ try {
130
+ // Remove markdown code blocks if present
131
+ const cleanText = text
132
+ .replace(/```json\s*/g, '')
133
+ .replace(/```\s*/g, '')
134
+ .trim();
135
+ // Extract JSON array
136
+ const jsonMatch = cleanText.match(/\[[\s\S]*?\]/);
137
+ if (!jsonMatch) {
138
+ log.warn('No JSON array found in AI response');
139
+ return [];
140
+ }
141
+ const suggestions = JSON.parse(jsonMatch[0]);
142
+ if (!Array.isArray(suggestions)) {
143
+ log.warn('AI response is not an array');
144
+ return [];
145
+ }
146
+ // Validate suggestions
147
+ return suggestions.filter(s => s.storyId &&
148
+ s.testName &&
149
+ s.endpoint?.method &&
150
+ s.endpoint?.path &&
151
+ s.expectedStatus);
152
+ }
153
+ catch (error) {
154
+ log.error('Failed to parse AI response', {
155
+ error: error instanceof Error ? error.message : String(error)
156
+ });
157
+ return [];
158
+ }
159
+ }
160
+ /**
161
+ * Converts AI suggestions into executable TestCase objects
162
+ */
163
+ function suggestionsToTests(suggestions, endpoints) {
164
+ const dataGen = new HeuristicDataGenerator();
165
+ const tests = [];
166
+ for (let i = 0; i < suggestions.length; i++) {
167
+ const suggestion = suggestions[i];
168
+ // Find matching endpoint
169
+ const endpoint = endpoints.find(e => e.method.toUpperCase() === suggestion.endpoint.method.toUpperCase() &&
170
+ e.path === suggestion.endpoint.path);
171
+ if (!endpoint) {
172
+ log.warn('Endpoint not found for suggestion', {
173
+ method: suggestion.endpoint.method,
174
+ path: suggestion.endpoint.path
175
+ });
176
+ continue;
177
+ }
178
+ // Generate base body from schema
179
+ let body = undefined;
180
+ if (endpoint.requestBody) {
181
+ try {
182
+ body = dataGen.generateSync(endpoint.requestBody);
183
+ }
184
+ catch (error) {
185
+ log.warn('Failed to generate base body', {
186
+ endpoint: endpoint.path,
187
+ error: error instanceof Error ? error.message : String(error)
188
+ });
189
+ }
190
+ }
191
+ // Apply AI bodyHints to override specific fields
192
+ if (suggestion.bodyHints && typeof body === 'object' && body !== null) {
193
+ body = { ...body, ...suggestion.bodyHints };
194
+ }
195
+ else if (suggestion.bodyHints) {
196
+ body = suggestion.bodyHints;
197
+ }
198
+ // Generate auth headers
199
+ const headers = generateAuthHeaders(endpoint.securitySchemes || []);
200
+ // Create test case
201
+ const testCase = {
202
+ id: `business-rule-${i + 1}`,
203
+ name: suggestion.testName,
204
+ description: suggestion.rationale,
205
+ category: 'business-rule',
206
+ method: endpoint.method,
207
+ path: endpoint.path,
208
+ pathParams: {},
209
+ queryParams: (suggestion.queryParams || {}),
210
+ headers,
211
+ body,
212
+ expectedStatus: suggestion.expectedStatus,
213
+ validateSchema: false, // Business rules may intentionally violate schema
214
+ origin: 'ai',
215
+ confidence: 'low'
216
+ };
217
+ // Add expected error if provided
218
+ if (suggestion.expectedError) {
219
+ testCase.expectedError = {
220
+ message: suggestion.expectedError
221
+ };
222
+ }
223
+ tests.push(testCase);
224
+ }
225
+ return tests;
226
+ }
227
+ //# sourceMappingURL=business-rule-from-stories-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-rule-from-stories-generator.js","sourceRoot":"","sources":["../../src/generators/business-rule-from-stories-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * AI-Powered Data Generator
3
+ *
4
+ * Extends heuristic generation with LLM calls for critical fields.
5
+ * Falls back to Faker when AI is unavailable or fails.
6
+ *
7
+ * @module generators/data/ai-data-generator
8
+ */
9
+ import type { OpenAPIV3 } from 'openapi-types';
10
+ import { HeuristicDataGenerator } from './heuristic-data-generator.js';
11
+ import type { GeneratorOptions } from './base-generator.js';
12
+ /**
13
+ * AI-enhanced data generator.
14
+ * Uses LLM for critical endpoint properties; Faker otherwise.
15
+ */
16
+ export declare class AIDataGenerator extends HeuristicDataGenerator {
17
+ constructor(seed?: number);
18
+ /**
19
+ * Override hook to inject AI-generated values
20
+ */
21
+ protected tryAIGeneration(schema: OpenAPIV3.SchemaObject, options: GeneratorOptions, propertyName?: string): Promise<unknown>;
22
+ }
23
+ //# sourceMappingURL=ai-data-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-data-generator.d.ts","sourceRoot":"","sources":["../../../src/generators/data/ai-data-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,sBAAsB;gBAC7C,IAAI,CAAC,EAAE,MAAM;IAIzB;;OAEG;cACsB,eAAe,CACtC,MAAM,EAAE,SAAS,CAAC,YAAY,EAC9B,OAAO,EAAE,gBAAgB,EACzB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC;CAoBpB"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * AI-Powered Data Generator
3
+ *
4
+ * Extends heuristic generation with LLM calls for critical fields.
5
+ * Falls back to Faker when AI is unavailable or fails.
6
+ *
7
+ * @module generators/data/ai-data-generator
8
+ */
9
+ import { HeuristicDataGenerator } from './heuristic-data-generator.js';
10
+ import { generateValueWithAI, isCriticalEndpoint } from '../../llm/data-generator-ai.js';
11
+ /**
12
+ * AI-enhanced data generator.
13
+ * Uses LLM for critical endpoint properties; Faker otherwise.
14
+ */
15
+ export class AIDataGenerator extends HeuristicDataGenerator {
16
+ constructor(seed) {
17
+ super(seed);
18
+ }
19
+ /**
20
+ * Override hook to inject AI-generated values
21
+ */
22
+ async tryAIGeneration(schema, options, propertyName) {
23
+ const { aiMode = 'faker', apiContext } = options;
24
+ if (aiMode === 'faker' || !propertyName)
25
+ return undefined;
26
+ const shouldUseAI = aiMode === 'ai-only' ||
27
+ (aiMode === 'hybrid' && isCriticalEndpoint(apiContext));
28
+ if (!shouldUseAI)
29
+ return undefined;
30
+ try {
31
+ const aiValue = await generateValueWithAI(schema, propertyName, apiContext);
32
+ if (aiValue !== null)
33
+ return aiValue;
34
+ }
35
+ catch {
36
+ // AI failed, fall through to faker
37
+ }
38
+ return undefined;
39
+ }
40
+ }
41
+ //# sourceMappingURL=ai-data-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-data-generator.js","sourceRoot":"","sources":["../../../src/generators/data/ai-data-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzF;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,sBAAsB;IACzD,YAAY,IAAa;QACvB,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAED;;OAEG;IACgB,KAAK,CAAC,eAAe,CACtC,MAA8B,EAC9B,OAAyB,EACzB,YAAqB;QAErB,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAEjD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,YAAY;YAAE,OAAO,SAAS,CAAC;QAE1D,MAAM,WAAW,GACf,MAAM,KAAK,SAAS;YACpB,CAAC,MAAM,KAAK,QAAQ,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC;QAE1D,IAAI,CAAC,WAAW;YAAE,OAAO,SAAS,CAAC;QAEnC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;YAC5E,IAAI,OAAO,KAAK,IAAI;gBAAE,OAAO,OAAO,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Base Data Generator - Template Method Pattern
3
+ *
4
+ * Defines the skeleton algorithm for data generation.
5
+ * Subclasses implement specific generation strategies.
6
+ *
7
+ * @module generators/data/base-generator
8
+ */
9
+ import type { OpenAPIV3 } from 'openapi-types';
10
+ import type { AILevel } from '../../types/ai-config.js';
11
+ import type { APIContext } from '../../llm/data-generator-ai.js';
12
+ /**
13
+ * Options for data generation
14
+ */
15
+ export interface GeneratorOptions {
16
+ /**
17
+ * Whether to include optional fields
18
+ * @default true
19
+ */
20
+ includeOptional?: boolean;
21
+ /**
22
+ * Seed for reproducible random data generation
23
+ */
24
+ seed?: number;
25
+ /**
26
+ * Real test data to use instead of faker (for valid/happy path tests)
27
+ * If provided, will use these values for matching property names
28
+ */
29
+ realData?: Record<string, unknown>;
30
+ /**
31
+ * Whether to prefer examples from schema over faker
32
+ * @default true
33
+ */
34
+ useExamples?: boolean;
35
+ /**
36
+ * AI generation mode
37
+ * - 'faker': Only use Faker.js (default, fast)
38
+ * - 'hybrid': Use AI for critical endpoints, Faker for others (recommended)
39
+ * - 'ai-only': Always use AI (slow, most realistic)
40
+ * @default 'faker'
41
+ */
42
+ aiMode?: 'faker' | 'hybrid' | 'ai-only';
43
+ /**
44
+ * API context for intelligent data generation
45
+ * Used when aiMode is 'hybrid' or 'ai-only'
46
+ */
47
+ apiContext?: APIContext;
48
+ /**
49
+ * AI level for test generation
50
+ * Maps to aiMode: off→faker, basic/smart→hybrid, advanced→ai-only
51
+ */
52
+ aiLevel?: AILevel;
53
+ }
54
+ /**
55
+ * Converts aiLevel to aiMode for data generation
56
+ * Mapping: off→faker, basic/smart→hybrid, advanced→ai-only
57
+ *
58
+ * @param aiLevel - AI level from configuration
59
+ * @param aiMode - Explicit AI mode (takes precedence if provided)
60
+ * @returns Effective AI mode to use for generation
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * aiLevelToMode('advanced') // Returns 'ai-only'
65
+ * aiLevelToMode('smart') // Returns 'hybrid'
66
+ * aiLevelToMode('off') // Returns 'faker'
67
+ * aiLevelToMode('smart', 'ai-only') // Returns 'ai-only' (explicit mode wins)
68
+ * ```
69
+ */
70
+ export declare function aiLevelToMode(aiLevel?: AILevel, aiMode?: GeneratorOptions['aiMode']): GeneratorOptions['aiMode'];
71
+ /**
72
+ * Strategy interface for type-specific value generation
73
+ */
74
+ export interface TypeGenerationStrategy {
75
+ /**
76
+ * Generate a value for the given schema
77
+ */
78
+ generate(schema: OpenAPIV3.SchemaObject, includeOptional: boolean, options: GeneratorOptions, propertyName?: string): Promise<unknown>;
79
+ /**
80
+ * Generate synchronously (faker only, no AI)
81
+ */
82
+ generateSync(schema: OpenAPIV3.SchemaObject, includeOptional: boolean, options: GeneratorOptions, propertyName?: string): unknown;
83
+ }
84
+ /**
85
+ * Template Method base class for data generation.
86
+ * Defines the algorithm skeleton; subclasses provide strategies.
87
+ */
88
+ export declare abstract class BaseDataGenerator {
89
+ protected strategies: Map<string, TypeGenerationStrategy>;
90
+ /**
91
+ * Template method - generates a value for a schema (async)
92
+ */
93
+ generateValue(schema: OpenAPIV3.SchemaObject, includeOptional: boolean, options: GeneratorOptions, propertyName?: string): Promise<unknown>;
94
+ /**
95
+ * Template method - generates a value synchronously (faker only)
96
+ */
97
+ generateValueSync(schema: OpenAPIV3.SchemaObject, includeOptional: boolean, options: GeneratorOptions, propertyName?: string): unknown;
98
+ /**
99
+ * Hook method - AI generation. Override in AI-capable subclasses.
100
+ * Returns undefined to fall through to faker generation.
101
+ */
102
+ protected tryAIGeneration(_schema: OpenAPIV3.SchemaObject, _options: GeneratorOptions, _propertyName?: string): Promise<unknown>;
103
+ /**
104
+ * Handle enum generation (shared between sync/async)
105
+ */
106
+ protected generateEnum(schema: OpenAPIV3.SchemaObject): unknown;
107
+ /**
108
+ * Handle composite schemas (allOf, oneOf, anyOf) - async
109
+ */
110
+ protected handleCompositeSchema(schema: OpenAPIV3.SchemaObject, includeOptional: boolean, options: GeneratorOptions, propertyName?: string): Promise<unknown>;
111
+ /**
112
+ * Handle composite schemas (allOf, oneOf, anyOf) - sync
113
+ */
114
+ protected handleCompositeSchemaSync(schema: OpenAPIV3.SchemaObject, includeOptional: boolean, options: GeneratorOptions, propertyName?: string): unknown;
115
+ /**
116
+ * Dispatch to appropriate type strategy
117
+ */
118
+ protected dispatchByType(schema: OpenAPIV3.SchemaObject, includeOptional: boolean, options: GeneratorOptions, propertyName: string | undefined, sync: true): unknown;
119
+ protected dispatchByType(schema: OpenAPIV3.SchemaObject, includeOptional: boolean, options: GeneratorOptions, propertyName: string | undefined, sync: false): Promise<unknown>;
120
+ }
121
+ //# sourceMappingURL=base-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-generator.d.ts","sourceRoot":"","sources":["../../../src/generators/data/base-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Base Data Generator - Template Method Pattern
3
+ *
4
+ * Defines the skeleton algorithm for data generation.
5
+ * Subclasses implement specific generation strategies.
6
+ *
7
+ * @module generators/data/base-generator
8
+ */
9
+ /**
10
+ * Converts aiLevel to aiMode for data generation
11
+ * Mapping: off→faker, basic/smart→hybrid, advanced→ai-only
12
+ *
13
+ * @param aiLevel - AI level from configuration
14
+ * @param aiMode - Explicit AI mode (takes precedence if provided)
15
+ * @returns Effective AI mode to use for generation
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * aiLevelToMode('advanced') // Returns 'ai-only'
20
+ * aiLevelToMode('smart') // Returns 'hybrid'
21
+ * aiLevelToMode('off') // Returns 'faker'
22
+ * aiLevelToMode('smart', 'ai-only') // Returns 'ai-only' (explicit mode wins)
23
+ * ```
24
+ */
25
+ export function aiLevelToMode(aiLevel, aiMode) {
26
+ if (aiMode)
27
+ return aiMode;
28
+ if (!aiLevel || aiLevel === 'off')
29
+ return 'faker';
30
+ switch (aiLevel) {
31
+ case 'basic':
32
+ case 'smart':
33
+ return 'hybrid';
34
+ case 'advanced':
35
+ return 'ai-only';
36
+ default:
37
+ return 'faker';
38
+ }
39
+ }
40
+ /**
41
+ * Template Method base class for data generation.
42
+ * Defines the algorithm skeleton; subclasses provide strategies.
43
+ */
44
+ export class BaseDataGenerator {
45
+ strategies = new Map();
46
+ /**
47
+ * Template method - generates a value for a schema (async)
48
+ */
49
+ async generateValue(schema, includeOptional, options, propertyName) {
50
+ const { realData, useExamples = true } = options;
51
+ // Priority 1: Use realData if provided and property name matches
52
+ if (realData && propertyName && propertyName in realData) {
53
+ return realData[propertyName];
54
+ }
55
+ // Priority 2: Use example from schema if available and useExamples is true
56
+ if (useExamples && schema.example !== undefined) {
57
+ return schema.example;
58
+ }
59
+ // Priority 3: AI generation hook (override in subclasses)
60
+ const aiValue = await this.tryAIGeneration(schema, options, propertyName);
61
+ if (aiValue !== undefined) {
62
+ return aiValue;
63
+ }
64
+ // Priority 4: Handle enum
65
+ if (schema.enum) {
66
+ return this.generateEnum(schema);
67
+ }
68
+ // Handle oneOf, anyOf, allOf
69
+ const compositeValue = await this.handleCompositeSchema(schema, includeOptional, options, propertyName);
70
+ if (compositeValue !== undefined) {
71
+ return compositeValue;
72
+ }
73
+ // Handle type-specific generation
74
+ return this.dispatchByType(schema, includeOptional, options, propertyName, false);
75
+ }
76
+ /**
77
+ * Template method - generates a value synchronously (faker only)
78
+ */
79
+ generateValueSync(schema, includeOptional, options, propertyName) {
80
+ const { realData, useExamples = true } = options;
81
+ // Priority 1: Use realData if provided and property name matches
82
+ if (realData && propertyName && propertyName in realData) {
83
+ return realData[propertyName];
84
+ }
85
+ // Priority 2: Use example from schema if available and useExamples is true
86
+ if (useExamples && schema.example !== undefined) {
87
+ return schema.example;
88
+ }
89
+ // Handle enum
90
+ if (schema.enum) {
91
+ return this.generateEnum(schema);
92
+ }
93
+ // Handle oneOf, anyOf, allOf (sync)
94
+ const compositeValue = this.handleCompositeSchemaSync(schema, includeOptional, options, propertyName);
95
+ if (compositeValue !== undefined) {
96
+ return compositeValue;
97
+ }
98
+ // Handle type-specific generation
99
+ return this.dispatchByType(schema, includeOptional, options, propertyName, true);
100
+ }
101
+ /**
102
+ * Hook method - AI generation. Override in AI-capable subclasses.
103
+ * Returns undefined to fall through to faker generation.
104
+ */
105
+ async tryAIGeneration(_schema, _options, _propertyName) {
106
+ return undefined;
107
+ }
108
+ /**
109
+ * Handle enum generation (shared between sync/async)
110
+ */
111
+ generateEnum(schema) {
112
+ const strategy = this.strategies.get('enum');
113
+ if (strategy) {
114
+ return strategy.generateSync(schema, true, {});
115
+ }
116
+ // Fallback
117
+ if (schema.enum && schema.enum.length > 0) {
118
+ const idx = Math.floor(Math.random() * schema.enum.length);
119
+ return schema.enum[idx];
120
+ }
121
+ return null;
122
+ }
123
+ /**
124
+ * Handle composite schemas (allOf, oneOf, anyOf) - async
125
+ */
126
+ async handleCompositeSchema(schema, includeOptional, options, propertyName) {
127
+ if (schema.oneOf && schema.oneOf.length > 0) {
128
+ const subSchema = schema.oneOf[0];
129
+ if ('$ref' in subSchema)
130
+ throw new Error('$ref in oneOf not supported - spec should be dereferenced');
131
+ return await this.generateValue(subSchema, includeOptional, options, propertyName);
132
+ }
133
+ if (schema.anyOf && schema.anyOf.length > 0) {
134
+ const subSchema = schema.anyOf[0];
135
+ if ('$ref' in subSchema)
136
+ throw new Error('$ref in anyOf not supported - spec should be dereferenced');
137
+ return await this.generateValue(subSchema, includeOptional, options, propertyName);
138
+ }
139
+ if (schema.allOf) {
140
+ const merged = {};
141
+ for (const subSchema of schema.allOf) {
142
+ if ('$ref' in subSchema)
143
+ throw new Error('$ref in allOf not supported - spec should be dereferenced');
144
+ Object.assign(merged, subSchema);
145
+ }
146
+ return await this.generateValue(merged, includeOptional, options, propertyName);
147
+ }
148
+ return undefined;
149
+ }
150
+ /**
151
+ * Handle composite schemas (allOf, oneOf, anyOf) - sync
152
+ */
153
+ handleCompositeSchemaSync(schema, includeOptional, options, propertyName) {
154
+ if (schema.oneOf && schema.oneOf.length > 0) {
155
+ const subSchema = schema.oneOf[0];
156
+ if ('$ref' in subSchema)
157
+ throw new Error('$ref in oneOf not supported - spec should be dereferenced');
158
+ return this.generateValueSync(subSchema, includeOptional, options, propertyName);
159
+ }
160
+ if (schema.anyOf && schema.anyOf.length > 0) {
161
+ const subSchema = schema.anyOf[0];
162
+ if ('$ref' in subSchema)
163
+ throw new Error('$ref in anyOf not supported - spec should be dereferenced');
164
+ return this.generateValueSync(subSchema, includeOptional, options, propertyName);
165
+ }
166
+ if (schema.allOf) {
167
+ const merged = {};
168
+ for (const subSchema of schema.allOf) {
169
+ if ('$ref' in subSchema)
170
+ throw new Error('$ref in allOf not supported - spec should be dereferenced');
171
+ Object.assign(merged, subSchema);
172
+ }
173
+ return this.generateValueSync(merged, includeOptional, options, propertyName);
174
+ }
175
+ return undefined;
176
+ }
177
+ dispatchByType(schema, includeOptional, options, propertyName, sync) {
178
+ if (!schema.type) {
179
+ const strategy = this.strategies.get('string');
180
+ if (!strategy)
181
+ return sync ? '' : Promise.resolve('');
182
+ return sync
183
+ ? strategy.generateSync(schema, includeOptional, options, propertyName)
184
+ : strategy.generate(schema, includeOptional, options, propertyName);
185
+ }
186
+ const strategy = this.strategies.get(schema.type);
187
+ if (!strategy) {
188
+ const fallback = this.strategies.get('string');
189
+ if (!fallback)
190
+ return sync ? '' : Promise.resolve('');
191
+ return sync
192
+ ? fallback.generateSync(schema, includeOptional, options, propertyName)
193
+ : fallback.generate(schema, includeOptional, options, propertyName);
194
+ }
195
+ return sync
196
+ ? strategy.generateSync(schema, includeOptional, options, propertyName)
197
+ : strategy.generate(schema, includeOptional, options, propertyName);
198
+ }
199
+ }
200
+ //# sourceMappingURL=base-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-generator.js","sourceRoot":"","sources":["../../../src/generators/data/base-generator.ts"],"names":[],"mappings":"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"}