mnehmos.trace.mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1662 -0
  3. package/dist/adapters/bootstrap.d.ts +29 -0
  4. package/dist/adapters/bootstrap.d.ts.map +1 -0
  5. package/dist/adapters/bootstrap.js +46 -0
  6. package/dist/adapters/bootstrap.js.map +1 -0
  7. package/dist/adapters/errors.d.ts +94 -0
  8. package/dist/adapters/errors.d.ts.map +1 -0
  9. package/dist/adapters/errors.js +107 -0
  10. package/dist/adapters/errors.js.map +1 -0
  11. package/dist/adapters/graphql/index.d.ts +9 -0
  12. package/dist/adapters/graphql/index.d.ts.map +1 -0
  13. package/dist/adapters/graphql/index.js +9 -0
  14. package/dist/adapters/graphql/index.js.map +1 -0
  15. package/dist/adapters/graphql/sdl-parser.d.ts +74 -0
  16. package/dist/adapters/graphql/sdl-parser.d.ts.map +1 -0
  17. package/dist/adapters/graphql/sdl-parser.js +559 -0
  18. package/dist/adapters/graphql/sdl-parser.js.map +1 -0
  19. package/dist/adapters/grpc/adapter.d.ts +76 -0
  20. package/dist/adapters/grpc/adapter.d.ts.map +1 -0
  21. package/dist/adapters/grpc/adapter.js +362 -0
  22. package/dist/adapters/grpc/adapter.js.map +1 -0
  23. package/dist/adapters/grpc/index.d.ts +10 -0
  24. package/dist/adapters/grpc/index.d.ts.map +1 -0
  25. package/dist/adapters/grpc/index.js +12 -0
  26. package/dist/adapters/grpc/index.js.map +1 -0
  27. package/dist/adapters/grpc/proto-parser.d.ts +76 -0
  28. package/dist/adapters/grpc/proto-parser.d.ts.map +1 -0
  29. package/dist/adapters/grpc/proto-parser.js +523 -0
  30. package/dist/adapters/grpc/proto-parser.js.map +1 -0
  31. package/dist/adapters/grpc/type-converter.d.ts +43 -0
  32. package/dist/adapters/grpc/type-converter.d.ts.map +1 -0
  33. package/dist/adapters/grpc/type-converter.js +270 -0
  34. package/dist/adapters/grpc/type-converter.js.map +1 -0
  35. package/dist/adapters/grpc/types.d.ts +85 -0
  36. package/dist/adapters/grpc/types.d.ts.map +1 -0
  37. package/dist/adapters/grpc/types.js +7 -0
  38. package/dist/adapters/grpc/types.js.map +1 -0
  39. package/dist/adapters/index.d.ts +39 -0
  40. package/dist/adapters/index.d.ts.map +1 -0
  41. package/dist/adapters/index.js +50 -0
  42. package/dist/adapters/index.js.map +1 -0
  43. package/dist/adapters/mcp.d.ts +23 -0
  44. package/dist/adapters/mcp.d.ts.map +1 -0
  45. package/dist/adapters/mcp.js +293 -0
  46. package/dist/adapters/mcp.js.map +1 -0
  47. package/dist/adapters/openapi/adapter.d.ts +213 -0
  48. package/dist/adapters/openapi/adapter.d.ts.map +1 -0
  49. package/dist/adapters/openapi/adapter.js +557 -0
  50. package/dist/adapters/openapi/adapter.js.map +1 -0
  51. package/dist/adapters/openapi/convert.d.ts +120 -0
  52. package/dist/adapters/openapi/convert.d.ts.map +1 -0
  53. package/dist/adapters/openapi/convert.js +363 -0
  54. package/dist/adapters/openapi/convert.js.map +1 -0
  55. package/dist/adapters/openapi/index.d.ts +39 -0
  56. package/dist/adapters/openapi/index.d.ts.map +1 -0
  57. package/dist/adapters/openapi/index.js +48 -0
  58. package/dist/adapters/openapi/index.js.map +1 -0
  59. package/dist/adapters/openapi/parser.d.ts +95 -0
  60. package/dist/adapters/openapi/parser.d.ts.map +1 -0
  61. package/dist/adapters/openapi/parser.js +171 -0
  62. package/dist/adapters/openapi/parser.js.map +1 -0
  63. package/dist/adapters/registry.d.ts +116 -0
  64. package/dist/adapters/registry.d.ts.map +1 -0
  65. package/dist/adapters/registry.js +246 -0
  66. package/dist/adapters/registry.js.map +1 -0
  67. package/dist/adapters/trpc/adapter.d.ts +159 -0
  68. package/dist/adapters/trpc/adapter.d.ts.map +1 -0
  69. package/dist/adapters/trpc/adapter.js +223 -0
  70. package/dist/adapters/trpc/adapter.js.map +1 -0
  71. package/dist/adapters/trpc/extractor.d.ts +218 -0
  72. package/dist/adapters/trpc/extractor.d.ts.map +1 -0
  73. package/dist/adapters/trpc/extractor.js +708 -0
  74. package/dist/adapters/trpc/extractor.js.map +1 -0
  75. package/dist/adapters/trpc/index.d.ts +31 -0
  76. package/dist/adapters/trpc/index.d.ts.map +1 -0
  77. package/dist/adapters/trpc/index.js +40 -0
  78. package/dist/adapters/trpc/index.js.map +1 -0
  79. package/dist/adapters/trpc/parser.d.ts +119 -0
  80. package/dist/adapters/trpc/parser.d.ts.map +1 -0
  81. package/dist/adapters/trpc/parser.js +128 -0
  82. package/dist/adapters/trpc/parser.js.map +1 -0
  83. package/dist/compare/index.d.ts +33 -0
  84. package/dist/compare/index.d.ts.map +1 -0
  85. package/dist/compare/index.js +261 -0
  86. package/dist/compare/index.js.map +1 -0
  87. package/dist/core/types.d.ts +188 -0
  88. package/dist/core/types.d.ts.map +1 -0
  89. package/dist/core/types.js +9 -0
  90. package/dist/core/types.js.map +1 -0
  91. package/dist/extract/index.d.ts +26 -0
  92. package/dist/extract/index.d.ts.map +1 -0
  93. package/dist/extract/index.js +44 -0
  94. package/dist/extract/index.js.map +1 -0
  95. package/dist/index.d.ts +9 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +674 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/languages/base.d.ts +57 -0
  100. package/dist/languages/base.d.ts.map +1 -0
  101. package/dist/languages/base.js +6 -0
  102. package/dist/languages/base.js.map +1 -0
  103. package/dist/languages/bootstrap.d.ts +10 -0
  104. package/dist/languages/bootstrap.d.ts.map +1 -0
  105. package/dist/languages/bootstrap.js +25 -0
  106. package/dist/languages/bootstrap.js.map +1 -0
  107. package/dist/languages/go/handlers/chi.d.ts +24 -0
  108. package/dist/languages/go/handlers/chi.d.ts.map +1 -0
  109. package/dist/languages/go/handlers/chi.js +205 -0
  110. package/dist/languages/go/handlers/chi.js.map +1 -0
  111. package/dist/languages/go/handlers/gin.d.ts +24 -0
  112. package/dist/languages/go/handlers/gin.d.ts.map +1 -0
  113. package/dist/languages/go/handlers/gin.js +156 -0
  114. package/dist/languages/go/handlers/gin.js.map +1 -0
  115. package/dist/languages/go/handlers/stdlib.d.ts +19 -0
  116. package/dist/languages/go/handlers/stdlib.d.ts.map +1 -0
  117. package/dist/languages/go/handlers/stdlib.js +112 -0
  118. package/dist/languages/go/handlers/stdlib.js.map +1 -0
  119. package/dist/languages/go/index.d.ts +18 -0
  120. package/dist/languages/go/index.d.ts.map +1 -0
  121. package/dist/languages/go/index.js +20 -0
  122. package/dist/languages/go/index.js.map +1 -0
  123. package/dist/languages/go/parser.d.ts +33 -0
  124. package/dist/languages/go/parser.d.ts.map +1 -0
  125. package/dist/languages/go/parser.js +95 -0
  126. package/dist/languages/go/parser.js.map +1 -0
  127. package/dist/languages/go/struct-extractor.d.ts +59 -0
  128. package/dist/languages/go/struct-extractor.d.ts.map +1 -0
  129. package/dist/languages/go/struct-extractor.js +483 -0
  130. package/dist/languages/go/struct-extractor.js.map +1 -0
  131. package/dist/languages/go/tag-parser.d.ts +62 -0
  132. package/dist/languages/go/tag-parser.d.ts.map +1 -0
  133. package/dist/languages/go/tag-parser.js +108 -0
  134. package/dist/languages/go/tag-parser.js.map +1 -0
  135. package/dist/languages/go/type-converter.d.ts +32 -0
  136. package/dist/languages/go/type-converter.d.ts.map +1 -0
  137. package/dist/languages/go/type-converter.js +226 -0
  138. package/dist/languages/go/type-converter.js.map +1 -0
  139. package/dist/languages/go/types.d.ts +153 -0
  140. package/dist/languages/go/types.d.ts.map +1 -0
  141. package/dist/languages/go/types.js +6 -0
  142. package/dist/languages/go/types.js.map +1 -0
  143. package/dist/languages/import-resolver.d.ts +645 -0
  144. package/dist/languages/import-resolver.d.ts.map +1 -0
  145. package/dist/languages/import-resolver.js +1278 -0
  146. package/dist/languages/import-resolver.js.map +1 -0
  147. package/dist/languages/index.d.ts +34 -0
  148. package/dist/languages/index.d.ts.map +1 -0
  149. package/dist/languages/index.js +93 -0
  150. package/dist/languages/index.js.map +1 -0
  151. package/dist/languages/json-schema.d.ts +40 -0
  152. package/dist/languages/json-schema.d.ts.map +1 -0
  153. package/dist/languages/json-schema.js +188 -0
  154. package/dist/languages/json-schema.js.map +1 -0
  155. package/dist/languages/python-ast/index.d.ts +8 -0
  156. package/dist/languages/python-ast/index.d.ts.map +1 -0
  157. package/dist/languages/python-ast/index.js +7 -0
  158. package/dist/languages/python-ast/index.js.map +1 -0
  159. package/dist/languages/python-ast/parser.d.ts +174 -0
  160. package/dist/languages/python-ast/parser.d.ts.map +1 -0
  161. package/dist/languages/python-ast/parser.js +1205 -0
  162. package/dist/languages/python-ast/parser.js.map +1 -0
  163. package/dist/languages/python-ast/type-resolver.d.ts +75 -0
  164. package/dist/languages/python-ast/type-resolver.d.ts.map +1 -0
  165. package/dist/languages/python-ast/type-resolver.js +421 -0
  166. package/dist/languages/python-ast/type-resolver.js.map +1 -0
  167. package/dist/languages/python-ast/types.d.ts +216 -0
  168. package/dist/languages/python-ast/types.d.ts.map +1 -0
  169. package/dist/languages/python-ast/types.js +6 -0
  170. package/dist/languages/python-ast/types.js.map +1 -0
  171. package/dist/languages/python.d.ts +55 -0
  172. package/dist/languages/python.d.ts.map +1 -0
  173. package/dist/languages/python.js +311 -0
  174. package/dist/languages/python.js.map +1 -0
  175. package/dist/languages/typescript.d.ts +272 -0
  176. package/dist/languages/typescript.d.ts.map +1 -0
  177. package/dist/languages/typescript.js +1381 -0
  178. package/dist/languages/typescript.js.map +1 -0
  179. package/dist/patterns/base.d.ts +146 -0
  180. package/dist/patterns/base.d.ts.map +1 -0
  181. package/dist/patterns/base.js +89 -0
  182. package/dist/patterns/base.js.map +1 -0
  183. package/dist/patterns/errors.d.ts +172 -0
  184. package/dist/patterns/errors.d.ts.map +1 -0
  185. package/dist/patterns/errors.js +185 -0
  186. package/dist/patterns/errors.js.map +1 -0
  187. package/dist/patterns/extractors.d.ts +170 -0
  188. package/dist/patterns/extractors.d.ts.map +1 -0
  189. package/dist/patterns/extractors.js +305 -0
  190. package/dist/patterns/extractors.js.map +1 -0
  191. package/dist/patterns/graphql/apollo-client.d.ts +80 -0
  192. package/dist/patterns/graphql/apollo-client.d.ts.map +1 -0
  193. package/dist/patterns/graphql/apollo-client.js +800 -0
  194. package/dist/patterns/graphql/apollo-client.js.map +1 -0
  195. package/dist/patterns/graphql/apollo-server.d.ts +55 -0
  196. package/dist/patterns/graphql/apollo-server.d.ts.map +1 -0
  197. package/dist/patterns/graphql/apollo-server.js +523 -0
  198. package/dist/patterns/graphql/apollo-server.js.map +1 -0
  199. package/dist/patterns/graphql/index.d.ts +11 -0
  200. package/dist/patterns/graphql/index.d.ts.map +1 -0
  201. package/dist/patterns/graphql/index.js +12 -0
  202. package/dist/patterns/graphql/index.js.map +1 -0
  203. package/dist/patterns/graphql/types.d.ts +213 -0
  204. package/dist/patterns/graphql/types.d.ts.map +1 -0
  205. package/dist/patterns/graphql/types.js +16 -0
  206. package/dist/patterns/graphql/types.js.map +1 -0
  207. package/dist/patterns/http-clients/axios.d.ts +148 -0
  208. package/dist/patterns/http-clients/axios.d.ts.map +1 -0
  209. package/dist/patterns/http-clients/axios.js +652 -0
  210. package/dist/patterns/http-clients/axios.js.map +1 -0
  211. package/dist/patterns/http-clients/fetch.d.ts +88 -0
  212. package/dist/patterns/http-clients/fetch.d.ts.map +1 -0
  213. package/dist/patterns/http-clients/fetch.js +364 -0
  214. package/dist/patterns/http-clients/fetch.js.map +1 -0
  215. package/dist/patterns/http-clients/index.d.ts +36 -0
  216. package/dist/patterns/http-clients/index.d.ts.map +1 -0
  217. package/dist/patterns/http-clients/index.js +50 -0
  218. package/dist/patterns/http-clients/index.js.map +1 -0
  219. package/dist/patterns/http-clients/property-access.d.ts +46 -0
  220. package/dist/patterns/http-clients/property-access.d.ts.map +1 -0
  221. package/dist/patterns/http-clients/property-access.js +818 -0
  222. package/dist/patterns/http-clients/property-access.js.map +1 -0
  223. package/dist/patterns/http-clients/type-inference.d.ts +48 -0
  224. package/dist/patterns/http-clients/type-inference.d.ts.map +1 -0
  225. package/dist/patterns/http-clients/type-inference.js +293 -0
  226. package/dist/patterns/http-clients/type-inference.js.map +1 -0
  227. package/dist/patterns/http-clients/types.d.ts +168 -0
  228. package/dist/patterns/http-clients/types.d.ts.map +1 -0
  229. package/dist/patterns/http-clients/types.js +10 -0
  230. package/dist/patterns/http-clients/types.js.map +1 -0
  231. package/dist/patterns/http-clients/url-extractor.d.ts +53 -0
  232. package/dist/patterns/http-clients/url-extractor.d.ts.map +1 -0
  233. package/dist/patterns/http-clients/url-extractor.js +338 -0
  234. package/dist/patterns/http-clients/url-extractor.js.map +1 -0
  235. package/dist/patterns/index.d.ts +44 -0
  236. package/dist/patterns/index.d.ts.map +1 -0
  237. package/dist/patterns/index.js +49 -0
  238. package/dist/patterns/index.js.map +1 -0
  239. package/dist/patterns/python/aiohttp.d.ts +21 -0
  240. package/dist/patterns/python/aiohttp.d.ts.map +1 -0
  241. package/dist/patterns/python/aiohttp.js +188 -0
  242. package/dist/patterns/python/aiohttp.js.map +1 -0
  243. package/dist/patterns/python/httpx.d.ts +20 -0
  244. package/dist/patterns/python/httpx.d.ts.map +1 -0
  245. package/dist/patterns/python/httpx.js +183 -0
  246. package/dist/patterns/python/httpx.js.map +1 -0
  247. package/dist/patterns/python/index.d.ts +32 -0
  248. package/dist/patterns/python/index.d.ts.map +1 -0
  249. package/dist/patterns/python/index.js +63 -0
  250. package/dist/patterns/python/index.js.map +1 -0
  251. package/dist/patterns/python/property-access.d.ts +27 -0
  252. package/dist/patterns/python/property-access.d.ts.map +1 -0
  253. package/dist/patterns/python/property-access.js +132 -0
  254. package/dist/patterns/python/property-access.js.map +1 -0
  255. package/dist/patterns/python/requests.d.ts +19 -0
  256. package/dist/patterns/python/requests.d.ts.map +1 -0
  257. package/dist/patterns/python/requests.js +239 -0
  258. package/dist/patterns/python/requests.js.map +1 -0
  259. package/dist/patterns/python/types.d.ts +95 -0
  260. package/dist/patterns/python/types.d.ts.map +1 -0
  261. package/dist/patterns/python/types.js +43 -0
  262. package/dist/patterns/python/types.js.map +1 -0
  263. package/dist/patterns/registry.d.ts +181 -0
  264. package/dist/patterns/registry.d.ts.map +1 -0
  265. package/dist/patterns/registry.js +304 -0
  266. package/dist/patterns/registry.js.map +1 -0
  267. package/dist/patterns/rest/express.d.ts +78 -0
  268. package/dist/patterns/rest/express.d.ts.map +1 -0
  269. package/dist/patterns/rest/express.js +289 -0
  270. package/dist/patterns/rest/express.js.map +1 -0
  271. package/dist/patterns/rest/fastify.d.ts +93 -0
  272. package/dist/patterns/rest/fastify.d.ts.map +1 -0
  273. package/dist/patterns/rest/fastify.js +420 -0
  274. package/dist/patterns/rest/fastify.js.map +1 -0
  275. package/dist/patterns/rest/index.d.ts +31 -0
  276. package/dist/patterns/rest/index.d.ts.map +1 -0
  277. package/dist/patterns/rest/index.js +45 -0
  278. package/dist/patterns/rest/index.js.map +1 -0
  279. package/dist/patterns/rest/middleware.d.ts +25 -0
  280. package/dist/patterns/rest/middleware.d.ts.map +1 -0
  281. package/dist/patterns/rest/middleware.js +219 -0
  282. package/dist/patterns/rest/middleware.js.map +1 -0
  283. package/dist/patterns/rest/path-parser.d.ts +50 -0
  284. package/dist/patterns/rest/path-parser.d.ts.map +1 -0
  285. package/dist/patterns/rest/path-parser.js +137 -0
  286. package/dist/patterns/rest/path-parser.js.map +1 -0
  287. package/dist/patterns/rest/response-inference.d.ts +44 -0
  288. package/dist/patterns/rest/response-inference.d.ts.map +1 -0
  289. package/dist/patterns/rest/response-inference.js +218 -0
  290. package/dist/patterns/rest/response-inference.js.map +1 -0
  291. package/dist/patterns/rest/types.d.ts +102 -0
  292. package/dist/patterns/rest/types.d.ts.map +1 -0
  293. package/dist/patterns/rest/types.js +10 -0
  294. package/dist/patterns/rest/types.js.map +1 -0
  295. package/dist/patterns/types.d.ts +105 -0
  296. package/dist/patterns/types.d.ts.map +1 -0
  297. package/dist/patterns/types.js +11 -0
  298. package/dist/patterns/types.js.map +1 -0
  299. package/dist/report/index.d.ts +11 -0
  300. package/dist/report/index.d.ts.map +1 -0
  301. package/dist/report/index.js +55 -0
  302. package/dist/report/index.js.map +1 -0
  303. package/dist/tools/contract-comments.d.ts +48 -0
  304. package/dist/tools/contract-comments.d.ts.map +1 -0
  305. package/dist/tools/contract-comments.js +130 -0
  306. package/dist/tools/contract-comments.js.map +1 -0
  307. package/dist/tools/index.d.ts +6 -0
  308. package/dist/tools/index.d.ts.map +1 -0
  309. package/dist/tools/index.js +6 -0
  310. package/dist/tools/index.js.map +1 -0
  311. package/dist/tools/scaffold.d.ts +38 -0
  312. package/dist/tools/scaffold.d.ts.map +1 -0
  313. package/dist/tools/scaffold.js +373 -0
  314. package/dist/tools/scaffold.js.map +1 -0
  315. package/dist/trace/index.d.ts +28 -0
  316. package/dist/trace/index.d.ts.map +1 -0
  317. package/dist/trace/index.js +45 -0
  318. package/dist/trace/index.js.map +1 -0
  319. package/dist/types.d.ts +135 -0
  320. package/dist/types.d.ts.map +1 -0
  321. package/dist/types.js +22 -0
  322. package/dist/types.js.map +1 -0
  323. package/dist/watch/cache.d.ts +41 -0
  324. package/dist/watch/cache.d.ts.map +1 -0
  325. package/dist/watch/cache.js +230 -0
  326. package/dist/watch/cache.js.map +1 -0
  327. package/dist/watch/index.d.ts +9 -0
  328. package/dist/watch/index.d.ts.map +1 -0
  329. package/dist/watch/index.js +7 -0
  330. package/dist/watch/index.js.map +1 -0
  331. package/dist/watch/project.d.ts +128 -0
  332. package/dist/watch/project.d.ts.map +1 -0
  333. package/dist/watch/project.js +152 -0
  334. package/dist/watch/project.js.map +1 -0
  335. package/dist/watch/watcher.d.ts +76 -0
  336. package/dist/watch/watcher.d.ts.map +1 -0
  337. package/dist/watch/watcher.js +235 -0
  338. package/dist/watch/watcher.js.map +1 -0
  339. package/package.json +70 -0
@@ -0,0 +1,652 @@
1
+ /**
2
+ * Axios Pattern Matcher
3
+ *
4
+ * Pattern matcher for axios HTTP client calls.
5
+ * Supports both direct axios usage and custom axios instances.
6
+ * Extracts URL patterns, HTTP methods, request/response types,
7
+ * and property access tracking for consumer schema inference.
8
+ *
9
+ * @module patterns/http-clients/axios
10
+ * @see .context/ADR-P2-3-HTTP-CLIENT-TRACING.md
11
+ */
12
+ import { Node } from 'ts-morph';
13
+ import { BasePatternMatcher } from '../base.js';
14
+ import { extractURL, composeURL } from './url-extractor.js';
15
+ import { findTypeInferenceSources } from './type-inference.js';
16
+ import { trackPropertyAccesses } from './property-access.js';
17
+ /* ═══════════════════════════════════════════════════════════════════════════
18
+ * 🌐 AxiosPatternMatcher Class
19
+ * ═══════════════════════════════════════════════════════════════════════════ */
20
+ /**
21
+ * Pattern matcher for axios library calls.
22
+ *
23
+ * Detects patterns like:
24
+ * - `axios.get('/api/users')`
25
+ * - `axios.post('/api/users', data)`
26
+ * - `axios.get<User>('/api/user/1')` (with type inference)
27
+ * - `api.get('/users')` (custom instances)
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const matcher = new AxiosPatternMatcher();
32
+ * const matches = matcher.scan(sourceFile);
33
+ * // Returns matches for all axios calls with extracted metadata
34
+ * ```
35
+ */
36
+ export class AxiosPatternMatcher extends BasePatternMatcher {
37
+ name = 'axios-client';
38
+ framework = 'axios';
39
+ supportedTypes = ['call', 'property'];
40
+ /** Map of instance variable names to their configurations */
41
+ instanceConfigs = new Map();
42
+ /** Track which source files have been scanned for instances */
43
+ instancesCollectedForFiles = new Set();
44
+ patterns = [
45
+ // axios.get(), axios.post(), etc.
46
+ {
47
+ type: 'property',
48
+ signature: /^axios\.(get|post|put|delete|patch|head|options|request)$/,
49
+ },
50
+ // axios(config) or axios(url, config)
51
+ {
52
+ type: 'call',
53
+ signature: /^axios$/,
54
+ },
55
+ // axios.create()
56
+ {
57
+ type: 'property',
58
+ signature: /^axios\.create$/,
59
+ },
60
+ ];
61
+ /* ─────────────────────────────────────────────────────────────────────────
62
+ * Source File Scanning
63
+ * ───────────────────────────────────────────────────────────────────────── */
64
+ /**
65
+ * Scan a source file for axios patterns.
66
+ *
67
+ * First collects axios instance configurations, then matches call patterns.
68
+ *
69
+ * @param sourceFile - The source file to scan
70
+ * @returns Array of match results
71
+ */
72
+ scan(sourceFile) {
73
+ // First pass: collect axios instance configurations
74
+ this.collectAxiosInstances(sourceFile);
75
+ // Second pass: match patterns
76
+ return super.scan(sourceFile);
77
+ }
78
+ /* ─────────────────────────────────────────────────────────────────────────
79
+ * Instance Configuration Collection
80
+ * ───────────────────────────────────────────────────────────────────────── */
81
+ /**
82
+ * Collect axios.create() instance configurations.
83
+ *
84
+ * @internal
85
+ */
86
+ collectAxiosInstances(sourceFile) {
87
+ this.instanceConfigs.clear();
88
+ // Find all call expressions
89
+ sourceFile.forEachDescendant((node) => {
90
+ if (Node.isCallExpression(node)) {
91
+ const expr = node.getExpression();
92
+ // Check for axios.create()
93
+ if (Node.isPropertyAccessExpression(expr)) {
94
+ const objExpr = expr.getExpression();
95
+ const propName = expr.getName();
96
+ if (Node.isIdentifier(objExpr) &&
97
+ objExpr.getText() === 'axios' &&
98
+ propName === 'create') {
99
+ this.extractAxiosInstanceConfig(node);
100
+ }
101
+ }
102
+ }
103
+ });
104
+ }
105
+ /**
106
+ * Extract configuration from axios.create() call.
107
+ *
108
+ * @internal
109
+ */
110
+ extractAxiosInstanceConfig(callNode) {
111
+ if (!Node.isCallExpression(callNode))
112
+ return;
113
+ // Find the variable name
114
+ const parent = callNode.getParent();
115
+ let varName;
116
+ if (parent && Node.isVariableDeclaration(parent)) {
117
+ const nameNode = parent.getNameNode();
118
+ if (Node.isIdentifier(nameNode)) {
119
+ varName = nameNode.getText();
120
+ }
121
+ }
122
+ if (!varName)
123
+ return;
124
+ const config = { name: varName };
125
+ // Parse config argument
126
+ const args = callNode.getArguments();
127
+ if (args.length > 0 && Node.isObjectLiteralExpression(args[0])) {
128
+ const configObj = args[0];
129
+ for (const prop of configObj.getProperties()) {
130
+ if (!Node.isPropertyAssignment(prop))
131
+ continue;
132
+ const propName = prop.getName();
133
+ const init = prop.getInitializer();
134
+ if (!init)
135
+ continue;
136
+ switch (propName) {
137
+ case 'baseURL':
138
+ if (Node.isStringLiteral(init)) {
139
+ config.baseURL = init.getLiteralValue();
140
+ }
141
+ break;
142
+ case 'timeout':
143
+ if (Node.isNumericLiteral(init)) {
144
+ config.timeout = Number(init.getLiteralValue());
145
+ }
146
+ break;
147
+ case 'headers':
148
+ config.headers = this.extractHeadersObject(init);
149
+ break;
150
+ }
151
+ }
152
+ }
153
+ this.instanceConfigs.set(varName, config);
154
+ }
155
+ /* ─────────────────────────────────────────────────────────────────────────
156
+ * Pattern Matching
157
+ * ───────────────────────────────────────────────────────────────────────── */
158
+ /**
159
+ * Match patterns against a node, with lazy instance collection.
160
+ *
161
+ * Ensures axios.create() instances are collected before matching
162
+ * when called directly (bypassing scan()).
163
+ *
164
+ * @param node - AST node to test
165
+ * @returns MatchResult if matched, null otherwise
166
+ */
167
+ match(node) {
168
+ // Lazy initialization: collect instances from the source file if not already done
169
+ const sourceFile = node.getSourceFile();
170
+ const filePath = sourceFile.getFilePath();
171
+ if (!this.instancesCollectedForFiles.has(filePath)) {
172
+ this.collectAxiosInstances(sourceFile);
173
+ this.instancesCollectedForFiles.add(filePath);
174
+ }
175
+ return super.match(node);
176
+ }
177
+ /**
178
+ * Match a single pattern against a node.
179
+ *
180
+ * @param pattern - Pattern definition to match
181
+ * @param node - AST node to test
182
+ * @returns MatchResult if matched, null otherwise
183
+ */
184
+ matchPattern(pattern, node) {
185
+ if (!Node.isCallExpression(node)) {
186
+ return null;
187
+ }
188
+ const expression = node.getExpression();
189
+ // Pattern: axios.method() or instance.method()
190
+ if (Node.isPropertyAccessExpression(expression)) {
191
+ const objExpr = expression.getExpression();
192
+ const methodName = expression.getName();
193
+ // Skip axios.create() - it's for configuration, not requests
194
+ if (Node.isIdentifier(objExpr) &&
195
+ objExpr.getText() === 'axios' &&
196
+ methodName === 'create') {
197
+ return null;
198
+ }
199
+ // Check for axios.method()
200
+ if (Node.isIdentifier(objExpr)) {
201
+ const objName = objExpr.getText();
202
+ // Direct axios usage
203
+ if (objName === 'axios') {
204
+ const signature = `axios.${methodName}`;
205
+ if (this.matchesSignature(signature, pattern.signature)) {
206
+ return this.buildMatchResult(pattern, node, methodName.toUpperCase());
207
+ }
208
+ }
209
+ // Custom instance usage (e.g., api.get())
210
+ if (this.instanceConfigs.has(objName)) {
211
+ const httpMethods = ['get', 'post', 'put', 'delete', 'patch', 'head', 'options', 'request'];
212
+ if (httpMethods.includes(methodName.toLowerCase())) {
213
+ return this.buildMatchResult(pattern, node, methodName.toUpperCase(), objName);
214
+ }
215
+ }
216
+ }
217
+ }
218
+ // Pattern: axios(config) or axios(url, config)
219
+ if (Node.isIdentifier(expression)) {
220
+ const name = expression.getText();
221
+ if (name === 'axios' && this.matchesSignature(name, pattern.signature)) {
222
+ return this.buildAxiosCallResult(pattern, node);
223
+ }
224
+ }
225
+ return null;
226
+ }
227
+ /* ─────────────────────────────────────────────────────────────────────────
228
+ * Match Result Building
229
+ * ───────────────────────────────────────────────────────────────────────── */
230
+ /**
231
+ * Build a match result from an axios method call.
232
+ *
233
+ * @internal
234
+ */
235
+ buildMatchResult(pattern, callNode, method, instanceName) {
236
+ if (!Node.isCallExpression(callNode)) {
237
+ throw new Error('Expected call expression');
238
+ }
239
+ const sourceFile = callNode.getSourceFile();
240
+ const args = callNode.getArguments();
241
+ // Extract captures
242
+ const captures = this.extractCaptures(callNode, args, method, instanceName);
243
+ // Build identifier as "METHOD /path"
244
+ const url = captures.url?.raw ||
245
+ captures.url?.static || '/';
246
+ const identifier = `${method} ${url}`;
247
+ return {
248
+ pattern,
249
+ node: callNode,
250
+ framework: this.framework,
251
+ identifier,
252
+ location: this.getLocation(callNode, sourceFile.getFilePath()),
253
+ captures,
254
+ };
255
+ }
256
+ /**
257
+ * Build a match result from axios(config) style call.
258
+ *
259
+ * @internal
260
+ */
261
+ buildAxiosCallResult(pattern, callNode) {
262
+ if (!Node.isCallExpression(callNode)) {
263
+ throw new Error('Expected call expression');
264
+ }
265
+ const sourceFile = callNode.getSourceFile();
266
+ const args = callNode.getArguments();
267
+ let method = 'GET';
268
+ let url;
269
+ // Check if first arg is URL string or config object
270
+ if (args.length > 0) {
271
+ if (Node.isStringLiteral(args[0]) || Node.isTemplateExpression(args[0])) {
272
+ // axios(url, config?)
273
+ const urlResult = extractURL(args[0]);
274
+ url = urlResult?.raw || urlResult?.static;
275
+ if (args.length > 1 && Node.isObjectLiteralExpression(args[1])) {
276
+ const configMethod = this.extractMethodFromConfig(args[1]);
277
+ if (configMethod)
278
+ method = configMethod;
279
+ }
280
+ }
281
+ else if (Node.isObjectLiteralExpression(args[0])) {
282
+ // axios(config)
283
+ const config = this.parseAxiosConfig(args[0]);
284
+ method = config.method || 'GET';
285
+ url = config.url;
286
+ }
287
+ }
288
+ const captures = this.extractCaptures(callNode, args, method);
289
+ const identifier = `${method} ${url || '/'}`;
290
+ return {
291
+ pattern,
292
+ node: callNode,
293
+ framework: this.framework,
294
+ identifier,
295
+ location: this.getLocation(callNode, sourceFile.getFilePath()),
296
+ captures,
297
+ };
298
+ }
299
+ /* ─────────────────────────────────────────────────────────────────────────
300
+ * Capture Extraction
301
+ * ───────────────────────────────────────────────────────────────────────── */
302
+ /**
303
+ * Extract captures from an axios call.
304
+ *
305
+ * @internal
306
+ */
307
+ extractCaptures(callNode, args, method, instanceName) {
308
+ if (!Node.isCallExpression(callNode)) {
309
+ return { httpMethod: method };
310
+ }
311
+ const captures = {
312
+ httpMethod: method,
313
+ };
314
+ // Get instance config if using a custom instance
315
+ const instanceConfig = instanceName ? this.instanceConfigs.get(instanceName) : undefined;
316
+ // Extract URL from first argument
317
+ if (args.length > 0) {
318
+ const urlNode = args[0];
319
+ // Check if it's a config object (axios(config) style)
320
+ if (Node.isObjectLiteralExpression(urlNode)) {
321
+ const config = this.parseAxiosConfig(urlNode);
322
+ if (config.url) {
323
+ // Build URL result with baseURL if present
324
+ const fullUrl = config.baseURL
325
+ ? composeURL(config.baseURL, config.url)
326
+ : config.url;
327
+ const urlResult = {
328
+ raw: fullUrl,
329
+ isDynamic: false,
330
+ static: config.url,
331
+ };
332
+ if (config.baseURL) {
333
+ urlResult.baseURL = config.baseURL;
334
+ }
335
+ captures.url = urlResult;
336
+ captures.routePath = fullUrl;
337
+ }
338
+ if (config.method) {
339
+ captures.httpMethod = config.method;
340
+ }
341
+ if (config.data !== undefined) {
342
+ captures.requestBody = config.data;
343
+ }
344
+ if (config.headers) {
345
+ captures.requestHeaders = { static: config.headers };
346
+ }
347
+ }
348
+ else {
349
+ // URL as first argument
350
+ let urlResult = extractURL(urlNode);
351
+ // Compose with baseURL if using instance
352
+ if (urlResult && instanceConfig?.baseURL) {
353
+ const composedUrl = composeURL(instanceConfig.baseURL, urlResult.raw || urlResult.static || '');
354
+ urlResult = {
355
+ ...urlResult,
356
+ raw: composedUrl,
357
+ baseURL: instanceConfig.baseURL,
358
+ };
359
+ }
360
+ if (urlResult) {
361
+ captures.url = urlResult;
362
+ captures.routePath = urlResult.raw || urlResult.static;
363
+ }
364
+ }
365
+ }
366
+ // Extract request body from second argument (for post, put, patch)
367
+ if (['POST', 'PUT', 'PATCH'].includes(method) && args.length > 1) {
368
+ captures.requestBody = this.extractBodyInfo(args[1]);
369
+ }
370
+ // Extract config from third argument (or second for get/delete)
371
+ const configIndex = ['POST', 'PUT', 'PATCH'].includes(method) ? 2 : 1;
372
+ if (args.length > configIndex) {
373
+ const configNode = args[configIndex];
374
+ if (Node.isObjectLiteralExpression(configNode)) {
375
+ const headers = this.extractHeadersFromConfig(configNode);
376
+ if (headers) {
377
+ captures.requestHeaders = headers;
378
+ }
379
+ }
380
+ }
381
+ // Extract type inference sources
382
+ const typeInference = findTypeInferenceSources(callNode);
383
+ if (typeInference.length > 0) {
384
+ captures.typeInference = typeInference;
385
+ }
386
+ // Track property accesses on the response
387
+ const propertyAccesses = trackPropertyAccesses(callNode);
388
+ if (propertyAccesses.length > 0) {
389
+ captures.propertyAccesses = propertyAccesses;
390
+ }
391
+ // Mark as axios client
392
+ captures.clientLibrary = 'axios';
393
+ // Record instance name if using custom instance
394
+ if (instanceName) {
395
+ captures.axiosInstance = instanceName;
396
+ }
397
+ return captures;
398
+ }
399
+ /* ─────────────────────────────────────────────────────────────────────────
400
+ * Config Parsing
401
+ * ───────────────────────────────────────────────────────────────────────── */
402
+ /**
403
+ * Parse axios config object.
404
+ *
405
+ * @internal
406
+ */
407
+ parseAxiosConfig(node) {
408
+ const result = {};
409
+ if (!Node.isObjectLiteralExpression(node)) {
410
+ return result;
411
+ }
412
+ for (const prop of node.getProperties()) {
413
+ if (!Node.isPropertyAssignment(prop))
414
+ continue;
415
+ const name = prop.getName();
416
+ const init = prop.getInitializer();
417
+ if (!init)
418
+ continue;
419
+ switch (name) {
420
+ case 'method':
421
+ if (Node.isStringLiteral(init)) {
422
+ const method = init.getLiteralValue().toUpperCase();
423
+ if (this.isValidMethod(method)) {
424
+ result.method = method;
425
+ }
426
+ }
427
+ break;
428
+ case 'url':
429
+ if (Node.isStringLiteral(init)) {
430
+ result.url = init.getLiteralValue();
431
+ }
432
+ break;
433
+ case 'baseURL':
434
+ if (Node.isStringLiteral(init)) {
435
+ result.baseURL = init.getLiteralValue();
436
+ }
437
+ break;
438
+ case 'data':
439
+ result.data = this.extractBodyInfo(init);
440
+ break;
441
+ case 'headers':
442
+ result.headers = this.extractHeadersObject(init);
443
+ break;
444
+ }
445
+ }
446
+ return result;
447
+ }
448
+ /**
449
+ * Extract method from config object.
450
+ *
451
+ * @internal
452
+ */
453
+ extractMethodFromConfig(node) {
454
+ if (!Node.isObjectLiteralExpression(node))
455
+ return undefined;
456
+ const methodProp = node.getProperty('method');
457
+ if (methodProp && Node.isPropertyAssignment(methodProp)) {
458
+ const init = methodProp.getInitializer();
459
+ if (init && Node.isStringLiteral(init)) {
460
+ const method = init.getLiteralValue().toUpperCase();
461
+ if (this.isValidMethod(method)) {
462
+ return method;
463
+ }
464
+ }
465
+ }
466
+ return undefined;
467
+ }
468
+ /**
469
+ * Extract headers from config object.
470
+ *
471
+ * @internal
472
+ */
473
+ extractHeadersFromConfig(node) {
474
+ if (!Node.isObjectLiteralExpression(node))
475
+ return undefined;
476
+ const headersProp = node.getProperty('headers');
477
+ if (headersProp && Node.isPropertyAssignment(headersProp)) {
478
+ const init = headersProp.getInitializer();
479
+ if (init) {
480
+ return this.extractHeadersInfo(init);
481
+ }
482
+ }
483
+ return undefined;
484
+ }
485
+ /**
486
+ * Check if a string is a valid HTTP method.
487
+ *
488
+ * @internal
489
+ */
490
+ isValidMethod(method) {
491
+ return ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'].includes(method);
492
+ }
493
+ /* ─────────────────────────────────────────────────────────────────────────
494
+ * Request Body & Headers Extraction
495
+ * ───────────────────────────────────────────────────────────────────────── */
496
+ /**
497
+ * Extract body information.
498
+ *
499
+ * @internal
500
+ */
501
+ extractBodyInfo(node) {
502
+ if (Node.isObjectLiteralExpression(node)) {
503
+ return { type: 'object', value: node.getText() };
504
+ }
505
+ if (Node.isIdentifier(node)) {
506
+ return { type: 'reference', name: node.getText() };
507
+ }
508
+ return { type: 'unknown', raw: node.getText() };
509
+ }
510
+ /**
511
+ * Extract headers object as static Record.
512
+ *
513
+ * @internal
514
+ */
515
+ extractHeadersObject(node) {
516
+ if (!Node.isObjectLiteralExpression(node))
517
+ return undefined;
518
+ const headers = {};
519
+ for (const prop of node.getProperties()) {
520
+ if (Node.isPropertyAssignment(prop)) {
521
+ const name = prop.getName();
522
+ const init = prop.getInitializer();
523
+ if (init && Node.isStringLiteral(init)) {
524
+ headers[name] = init.getLiteralValue();
525
+ }
526
+ }
527
+ }
528
+ return Object.keys(headers).length > 0 ? headers : undefined;
529
+ }
530
+ /**
531
+ * Extract headers information with static/dynamic classification.
532
+ *
533
+ * @internal
534
+ */
535
+ extractHeadersInfo(node) {
536
+ const result = {};
537
+ if (Node.isObjectLiteralExpression(node)) {
538
+ const staticHeaders = {};
539
+ const dynamicHeaders = [];
540
+ for (const prop of node.getProperties()) {
541
+ if (Node.isPropertyAssignment(prop)) {
542
+ const name = prop.getName();
543
+ const init = prop.getInitializer();
544
+ if (init && Node.isStringLiteral(init)) {
545
+ staticHeaders[name] = init.getLiteralValue();
546
+ }
547
+ else {
548
+ dynamicHeaders.push(name);
549
+ }
550
+ }
551
+ }
552
+ if (Object.keys(staticHeaders).length > 0) {
553
+ result.static = staticHeaders;
554
+ }
555
+ if (dynamicHeaders.length > 0) {
556
+ result.dynamic = dynamicHeaders;
557
+ }
558
+ }
559
+ return result;
560
+ }
561
+ /* ─────────────────────────────────────────────────────────────────────────
562
+ * Schema Extraction
563
+ * ───────────────────────────────────────────────────────────────────────── */
564
+ /**
565
+ * Extract schema from a match result.
566
+ *
567
+ * @param match - The match result to extract schema from
568
+ * @returns NormalizedSchema representing the axios call
569
+ */
570
+ async extract(match) {
571
+ const captures = match.captures;
572
+ const url = captures.url?.raw ||
573
+ captures.url?.static || '';
574
+ const method = captures.httpMethod || 'GET';
575
+ const schema = {
576
+ name: `${method} ${url}`,
577
+ properties: {
578
+ url: {
579
+ type: { kind: 'primitive', value: 'string' },
580
+ optional: false,
581
+ nullable: false,
582
+ readonly: true,
583
+ deprecated: false,
584
+ description: `URL: ${url}`,
585
+ },
586
+ method: {
587
+ type: { kind: 'literal', value: captures.httpMethod || 'GET' },
588
+ optional: false,
589
+ nullable: false,
590
+ readonly: true,
591
+ deprecated: false,
592
+ },
593
+ },
594
+ required: ['url', 'method'],
595
+ source: {
596
+ source: 'typescript',
597
+ id: match.identifier,
598
+ },
599
+ location: match.location,
600
+ };
601
+ // Add request body if present
602
+ if (captures.requestBody) {
603
+ schema.properties.requestBody = {
604
+ type: { kind: 'any' },
605
+ optional: true,
606
+ nullable: false,
607
+ readonly: false,
608
+ deprecated: false,
609
+ };
610
+ }
611
+ // Add inferred response type
612
+ const typeInference = captures.typeInference;
613
+ if (typeInference && typeInference.length > 0) {
614
+ const bestType = typeInference[0];
615
+ schema.properties.responseType = {
616
+ type: { kind: 'ref', name: bestType.typeText || 'unknown' },
617
+ optional: true,
618
+ nullable: false,
619
+ readonly: true,
620
+ deprecated: false,
621
+ description: `Inferred via ${bestType.method}`,
622
+ };
623
+ }
624
+ // Add property accesses
625
+ const propertyAccesses = captures.propertyAccesses;
626
+ if (propertyAccesses && propertyAccesses.length > 0) {
627
+ schema.properties.accessedProperties = {
628
+ type: {
629
+ kind: 'array',
630
+ element: { kind: 'primitive', value: 'string' }
631
+ },
632
+ optional: true,
633
+ nullable: false,
634
+ readonly: true,
635
+ deprecated: false,
636
+ description: `Properties accessed: ${propertyAccesses.map(p => p.path).join(', ')}`,
637
+ };
638
+ }
639
+ // Add instance info if using custom axios instance
640
+ if (captures.axiosInstance) {
641
+ schema.properties.axiosInstance = {
642
+ type: { kind: 'literal', value: captures.axiosInstance },
643
+ optional: true,
644
+ nullable: false,
645
+ readonly: true,
646
+ deprecated: false,
647
+ };
648
+ }
649
+ return schema;
650
+ }
651
+ }
652
+ //# sourceMappingURL=axios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios.js","sourceRoot":"","sources":["../../../src/patterns/http-clients/axios.ts"],"names":[],"mappings":"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"}