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 @@
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/patterns/rest/express.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Fastify Pattern Matcher
3
+ *
4
+ * Detects Fastify route patterns including:
5
+ * - fastify.get(), fastify.post(), etc.
6
+ * - fastify.route({ method, url, schema })
7
+ * - server.get(), app.get() (alternative instance names)
8
+ * - Schema extraction (body, querystring, params, headers, response)
9
+ *
10
+ * @module patterns/rest/fastify
11
+ * @see .context/ADR-P2-2-REST-DETECTION.md
12
+ */
13
+ import { Node, ObjectLiteralExpression } from 'ts-morph';
14
+ import type { NormalizedSchema } from '../../core/types.js';
15
+ import { BasePatternMatcher } from '../base.js';
16
+ import type { PatternDef, MatchResult, PatternType } from '../types.js';
17
+ import type { FastifySchemas } from './types.js';
18
+ /**
19
+ * Pattern matcher for Fastify routes.
20
+ *
21
+ * Detects patterns:
22
+ * - `fastify.get()`, `fastify.post()`, etc.
23
+ * - `fastify.route({ method, url, schema })`
24
+ * - `server.get()`, `app.get()` (alternative instance names)
25
+ *
26
+ * Also extracts Fastify schema definitions:
27
+ * - `body`, `querystring`, `params`, `headers`, `response`
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const matcher = new FastifyPatternMatcher();
32
+ * const result = matcher.match(callExpressionNode);
33
+ * if (result) {
34
+ * console.log(result.captures.schemas?.body); // Schema node
35
+ * console.log(result.captures.schemas?.response); // Map<number, Node>
36
+ * }
37
+ * ```
38
+ */
39
+ export declare class FastifyPatternMatcher extends BasePatternMatcher {
40
+ readonly name = "fastify";
41
+ readonly framework = "fastify";
42
+ readonly supportedTypes: PatternType[];
43
+ readonly patterns: PatternDef[];
44
+ /**
45
+ * Match an AST node against Fastify patterns
46
+ */
47
+ match(node: Node): MatchResult | null;
48
+ /**
49
+ * Match shorthand HTTP method calls: fastify.get(), server.post(), etc.
50
+ */
51
+ private matchShorthandMethod;
52
+ /**
53
+ * Match fastify.route() method
54
+ */
55
+ private matchRouteMethod;
56
+ /**
57
+ * Extract schemas from Fastify options object
58
+ */
59
+ extractSchemasFromOptions(options: ObjectLiteralExpression): FastifySchemas | undefined;
60
+ /**
61
+ * Extract response schemas by status code
62
+ */
63
+ private extractResponseSchemas;
64
+ /**
65
+ * Parse method value which can be string or array
66
+ */
67
+ private parseMethodValue;
68
+ /**
69
+ * Get a property value from an object literal
70
+ */
71
+ private getPropertyValue;
72
+ /**
73
+ * Check if a method name is an HTTP method
74
+ */
75
+ private isHttpMethod;
76
+ /**
77
+ * Get the router/app name from an expression
78
+ */
79
+ private getRouterName;
80
+ /**
81
+ * Extract string value from a path argument
82
+ */
83
+ private extractPathString;
84
+ /**
85
+ * Extract pattern - implement abstract method
86
+ */
87
+ protected matchPattern(pattern: PatternDef, node: Node): MatchResult | null;
88
+ /**
89
+ * Extract schema from match
90
+ */
91
+ extract(match: MatchResult): Promise<NormalizedSchema>;
92
+ }
93
+ //# sourceMappingURL=fastify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../../../src/patterns/rest/fastify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,IAAI,EAAkB,uBAAuB,EAAsB,MAAM,UAAU,CAAC;AAC7F,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAiC,cAAc,EAAE,MAAM,YAAY,CAAC;AAiBhF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,qBAAsB,SAAQ,kBAAkB;IAC3D,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,SAAS,aAAa;IAC/B,QAAQ,CAAC,cAAc,EAAE,WAAW,EAAE,CAAwB;IAE9D,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,CAa7B;IAEF;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,IAAI;IAkBrC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqE5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA2ExB;;OAEG;IACH,yBAAyB,CAAC,OAAO,EAAE,uBAAuB,GAAG,cAAc,GAAG,SAAS;IA8CvF;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoB9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,IAAI;IAI3E;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAmF7D"}
@@ -0,0 +1,420 @@
1
+ /**
2
+ * Fastify Pattern Matcher
3
+ *
4
+ * Detects Fastify route patterns including:
5
+ * - fastify.get(), fastify.post(), etc.
6
+ * - fastify.route({ method, url, schema })
7
+ * - server.get(), app.get() (alternative instance names)
8
+ * - Schema extraction (body, querystring, params, headers, response)
9
+ *
10
+ * @module patterns/rest/fastify
11
+ * @see .context/ADR-P2-2-REST-DETECTION.md
12
+ */
13
+ import { Node } from 'ts-morph';
14
+ import { BasePatternMatcher } from '../base.js';
15
+ import { parsePath } from './path-parser.js';
16
+ /* ═══════════════════════════════════════════════════════════════════════════
17
+ * 📋 Constants
18
+ * ═══════════════════════════════════════════════════════════════════════════ */
19
+ /**
20
+ * HTTP methods supported by Fastify
21
+ */
22
+ const HTTP_METHODS = ['get', 'post', 'put', 'delete', 'patch', 'options', 'head', 'all'];
23
+ /* ═══════════════════════════════════════════════════════════════════════════
24
+ * 🔍 FastifyPatternMatcher Class
25
+ * ═══════════════════════════════════════════════════════════════════════════ */
26
+ /**
27
+ * Pattern matcher for Fastify routes.
28
+ *
29
+ * Detects patterns:
30
+ * - `fastify.get()`, `fastify.post()`, etc.
31
+ * - `fastify.route({ method, url, schema })`
32
+ * - `server.get()`, `app.get()` (alternative instance names)
33
+ *
34
+ * Also extracts Fastify schema definitions:
35
+ * - `body`, `querystring`, `params`, `headers`, `response`
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * const matcher = new FastifyPatternMatcher();
40
+ * const result = matcher.match(callExpressionNode);
41
+ * if (result) {
42
+ * console.log(result.captures.schemas?.body); // Schema node
43
+ * console.log(result.captures.schemas?.response); // Map<number, Node>
44
+ * }
45
+ * ```
46
+ */
47
+ export class FastifyPatternMatcher extends BasePatternMatcher {
48
+ name = 'fastify';
49
+ framework = 'fastify';
50
+ supportedTypes = ['call', 'property'];
51
+ patterns = [
52
+ // fastify.get(), fastify.post(), etc.
53
+ {
54
+ type: 'call',
55
+ signature: /^(get|post|put|delete|patch|options|head|all)$/i,
56
+ inputSchemaLocation: { type: 'arg-named', name: 'schema' },
57
+ },
58
+ // fastify.route({ method, url, schema })
59
+ {
60
+ type: 'call',
61
+ signature: /^route$/,
62
+ inputSchemaLocation: { type: 'arg', index: 0 },
63
+ },
64
+ ];
65
+ /**
66
+ * Match an AST node against Fastify patterns
67
+ */
68
+ match(node) {
69
+ if (!node)
70
+ return null;
71
+ // Must be a call expression
72
+ if (!Node.isCallExpression(node)) {
73
+ return null;
74
+ }
75
+ // Check for fastify.route() call
76
+ const routeResult = this.matchRouteMethod(node);
77
+ if (routeResult) {
78
+ return routeResult;
79
+ }
80
+ // Check for shorthand method call (fastify.get('/path', handler))
81
+ return this.matchShorthandMethod(node);
82
+ }
83
+ /**
84
+ * Match shorthand HTTP method calls: fastify.get(), server.post(), etc.
85
+ */
86
+ matchShorthandMethod(call) {
87
+ const expression = call.getExpression();
88
+ if (!Node.isPropertyAccessExpression(expression)) {
89
+ return null;
90
+ }
91
+ const methodName = expression.getName().toLowerCase();
92
+ if (!this.isHttpMethod(methodName)) {
93
+ return null;
94
+ }
95
+ // Get the receiver (fastify, server, app, etc.)
96
+ const receiver = expression.getExpression();
97
+ const routerName = this.getRouterName(receiver);
98
+ // First argument should be the path
99
+ const args = call.getArguments();
100
+ if (args.length === 0) {
101
+ return null;
102
+ }
103
+ const pathArg = args[0];
104
+ const routePath = this.extractPathString(pathArg);
105
+ if (!routePath) {
106
+ return null;
107
+ }
108
+ // Parse path parameters
109
+ const pathParams = parsePath(routePath);
110
+ // Check for options object (second arg could be options or handler)
111
+ let schemas;
112
+ let handlerNode;
113
+ if (args.length >= 2) {
114
+ const secondArg = args[1];
115
+ if (Node.isObjectLiteralExpression(secondArg)) {
116
+ // Options object
117
+ schemas = this.extractSchemasFromOptions(secondArg);
118
+ handlerNode = args.length > 2 ? args[2] : undefined;
119
+ }
120
+ else if (Node.isFunctionExpression(secondArg) || Node.isArrowFunction(secondArg)) {
121
+ // Handler function
122
+ handlerNode = secondArg;
123
+ }
124
+ }
125
+ const httpMethod = methodName.toUpperCase();
126
+ const sourceFile = call.getSourceFile();
127
+ const captures = {
128
+ httpMethod,
129
+ routePath,
130
+ pathParameters: pathParams,
131
+ routerName,
132
+ schemas,
133
+ handlerNode,
134
+ };
135
+ return {
136
+ pattern: this.patterns[0],
137
+ node: call,
138
+ framework: this.framework,
139
+ identifier: `${httpMethod} ${routePath}`,
140
+ location: this.getLocation(call, sourceFile.getFilePath()),
141
+ captures,
142
+ };
143
+ }
144
+ /**
145
+ * Match fastify.route() method
146
+ */
147
+ matchRouteMethod(call) {
148
+ const expression = call.getExpression();
149
+ if (!Node.isPropertyAccessExpression(expression)) {
150
+ return null;
151
+ }
152
+ const methodName = expression.getName();
153
+ if (methodName !== 'route') {
154
+ return null;
155
+ }
156
+ // Get options object (first argument)
157
+ const args = call.getArguments();
158
+ if (args.length === 0) {
159
+ return null;
160
+ }
161
+ const optionsArg = args[0];
162
+ if (!Node.isObjectLiteralExpression(optionsArg)) {
163
+ return null;
164
+ }
165
+ // Extract method and url from options
166
+ const methodValue = this.getPropertyValue(optionsArg, 'method');
167
+ const urlValue = this.getPropertyValue(optionsArg, 'url');
168
+ if (!urlValue) {
169
+ return null;
170
+ }
171
+ // Handle method as string or array
172
+ const httpMethods = this.parseMethodValue(methodValue);
173
+ if (httpMethods.length === 0) {
174
+ return null;
175
+ }
176
+ // Get router name
177
+ const receiver = expression.getExpression();
178
+ const routerName = this.getRouterName(receiver);
179
+ // Extract schemas
180
+ const schemas = this.extractSchemasFromOptions(optionsArg);
181
+ // Get handler
182
+ const handlerProp = optionsArg.getProperty('handler');
183
+ const handlerNode = handlerProp && Node.isPropertyAssignment(handlerProp)
184
+ ? handlerProp.getInitializer()
185
+ : undefined;
186
+ // Parse path parameters
187
+ const pathParams = parsePath(urlValue);
188
+ // Use the first method for the identifier
189
+ const httpMethod = httpMethods[0];
190
+ const sourceFile = call.getSourceFile();
191
+ const captures = {
192
+ httpMethod,
193
+ routePath: urlValue,
194
+ pathParameters: pathParams,
195
+ routerName,
196
+ schemas,
197
+ handlerNode,
198
+ };
199
+ return {
200
+ pattern: this.patterns[1],
201
+ node: call,
202
+ framework: this.framework,
203
+ identifier: `${httpMethod} ${urlValue}`,
204
+ location: this.getLocation(call, sourceFile.getFilePath()),
205
+ captures,
206
+ };
207
+ }
208
+ /**
209
+ * Extract schemas from Fastify options object
210
+ */
211
+ extractSchemasFromOptions(options) {
212
+ const schemaProp = options.getProperty('schema');
213
+ if (!schemaProp || !Node.isPropertyAssignment(schemaProp)) {
214
+ return undefined;
215
+ }
216
+ const schemaValue = schemaProp.getInitializer();
217
+ if (!schemaValue || !Node.isObjectLiteralExpression(schemaValue)) {
218
+ return undefined;
219
+ }
220
+ const schemas = {};
221
+ // Extract each schema type
222
+ const bodyProp = schemaValue.getProperty('body');
223
+ if (bodyProp && Node.isPropertyAssignment(bodyProp)) {
224
+ schemas.body = bodyProp.getInitializer();
225
+ }
226
+ const querystringProp = schemaValue.getProperty('querystring');
227
+ if (querystringProp && Node.isPropertyAssignment(querystringProp)) {
228
+ schemas.querystring = querystringProp.getInitializer();
229
+ }
230
+ const paramsProp = schemaValue.getProperty('params');
231
+ if (paramsProp && Node.isPropertyAssignment(paramsProp)) {
232
+ schemas.params = paramsProp.getInitializer();
233
+ }
234
+ const headersProp = schemaValue.getProperty('headers');
235
+ if (headersProp && Node.isPropertyAssignment(headersProp)) {
236
+ schemas.headers = headersProp.getInitializer();
237
+ }
238
+ // Extract response schemas
239
+ const responseProp = schemaValue.getProperty('response');
240
+ if (responseProp && Node.isPropertyAssignment(responseProp)) {
241
+ const responseValue = responseProp.getInitializer();
242
+ if (responseValue && Node.isObjectLiteralExpression(responseValue)) {
243
+ schemas.response = this.extractResponseSchemas(responseValue);
244
+ }
245
+ }
246
+ return Object.keys(schemas).length > 0 ? schemas : undefined;
247
+ }
248
+ /**
249
+ * Extract response schemas by status code
250
+ */
251
+ extractResponseSchemas(responseObj) {
252
+ const responses = new Map();
253
+ for (const prop of responseObj.getProperties()) {
254
+ if (Node.isPropertyAssignment(prop)) {
255
+ const name = prop.getName();
256
+ const statusCode = parseInt(name, 10);
257
+ if (!isNaN(statusCode)) {
258
+ const value = prop.getInitializer();
259
+ if (value) {
260
+ responses.set(statusCode, value);
261
+ }
262
+ }
263
+ }
264
+ }
265
+ return responses;
266
+ }
267
+ /**
268
+ * Parse method value which can be string or array
269
+ */
270
+ parseMethodValue(value) {
271
+ if (!value) {
272
+ return [];
273
+ }
274
+ // Remove quotes and brackets
275
+ const cleaned = value.replace(/['"[\]]/g, '').trim();
276
+ // Could be comma-separated
277
+ const methods = cleaned.split(',').map(m => m.trim().toUpperCase());
278
+ return methods.filter(m => HTTP_METHODS.includes(m.toLowerCase()));
279
+ }
280
+ /**
281
+ * Get a property value from an object literal
282
+ */
283
+ getPropertyValue(obj, name) {
284
+ const prop = obj.getProperty(name);
285
+ if (!prop || !Node.isPropertyAssignment(prop)) {
286
+ return undefined;
287
+ }
288
+ const initializer = prop.getInitializer();
289
+ if (!initializer) {
290
+ return undefined;
291
+ }
292
+ if (Node.isStringLiteral(initializer)) {
293
+ return initializer.getLiteralValue();
294
+ }
295
+ if (Node.isArrayLiteralExpression(initializer)) {
296
+ // For method arrays like ['GET', 'HEAD']
297
+ return initializer.getText();
298
+ }
299
+ return initializer.getText();
300
+ }
301
+ /**
302
+ * Check if a method name is an HTTP method
303
+ */
304
+ isHttpMethod(name) {
305
+ return HTTP_METHODS.includes(name.toLowerCase());
306
+ }
307
+ /**
308
+ * Get the router/app name from an expression
309
+ */
310
+ getRouterName(expr) {
311
+ if (Node.isIdentifier(expr)) {
312
+ return expr.getText();
313
+ }
314
+ if (Node.isPropertyAccessExpression(expr)) {
315
+ return expr.getText();
316
+ }
317
+ return undefined;
318
+ }
319
+ /**
320
+ * Extract string value from a path argument
321
+ */
322
+ extractPathString(arg) {
323
+ if (Node.isStringLiteral(arg)) {
324
+ return arg.getLiteralValue();
325
+ }
326
+ if (Node.isNoSubstitutionTemplateLiteral(arg)) {
327
+ return arg.getLiteralValue();
328
+ }
329
+ return undefined;
330
+ }
331
+ /**
332
+ * Extract pattern - implement abstract method
333
+ */
334
+ matchPattern(pattern, node) {
335
+ return this.match(node);
336
+ }
337
+ /**
338
+ * Extract schema from match
339
+ */
340
+ async extract(match) {
341
+ const captures = match.captures;
342
+ const properties = {};
343
+ // Add path parameters
344
+ if (captures.pathParameters) {
345
+ for (const param of captures.pathParameters) {
346
+ properties[`params.${param.name}`] = {
347
+ type: { kind: 'primitive', value: param.inferredType === 'number' ? 'number' : 'string' },
348
+ optional: param.optional,
349
+ nullable: false,
350
+ readonly: false,
351
+ deprecated: false,
352
+ };
353
+ }
354
+ }
355
+ // Note presence of schemas
356
+ if (captures.schemas) {
357
+ if (captures.schemas.body) {
358
+ properties['body._schema'] = {
359
+ type: { kind: 'unknown' },
360
+ optional: false,
361
+ nullable: false,
362
+ readonly: false,
363
+ deprecated: false,
364
+ description: 'Fastify body schema defined',
365
+ };
366
+ }
367
+ if (captures.schemas.querystring) {
368
+ properties['query._schema'] = {
369
+ type: { kind: 'unknown' },
370
+ optional: false,
371
+ nullable: false,
372
+ readonly: false,
373
+ deprecated: false,
374
+ description: 'Fastify querystring schema defined',
375
+ };
376
+ }
377
+ if (captures.schemas.params) {
378
+ properties['params._schema'] = {
379
+ type: { kind: 'unknown' },
380
+ optional: false,
381
+ nullable: false,
382
+ readonly: false,
383
+ deprecated: false,
384
+ description: 'Fastify params schema defined',
385
+ };
386
+ }
387
+ if (captures.schemas.headers) {
388
+ properties['headers._schema'] = {
389
+ type: { kind: 'unknown' },
390
+ optional: false,
391
+ nullable: false,
392
+ readonly: false,
393
+ deprecated: false,
394
+ description: 'Fastify headers schema defined',
395
+ };
396
+ }
397
+ if (captures.schemas.response) {
398
+ properties['response._schema'] = {
399
+ type: { kind: 'unknown' },
400
+ optional: false,
401
+ nullable: false,
402
+ readonly: false,
403
+ deprecated: false,
404
+ description: `Fastify response schemas: ${Array.from(captures.schemas.response.keys()).join(', ')}`,
405
+ };
406
+ }
407
+ }
408
+ return {
409
+ name: match.identifier,
410
+ properties,
411
+ required: Object.keys(properties).filter(k => !properties[k].optional),
412
+ source: {
413
+ source: 'typescript',
414
+ id: `fastify:${match.identifier}`,
415
+ },
416
+ location: match.location,
417
+ };
418
+ }
419
+ }
420
+ //# sourceMappingURL=fastify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.js","sourceRoot":"","sources":["../../../src/patterns/rest/fastify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * REST Pattern Detection Module
3
+ *
4
+ * Provides pattern matchers for Express.js and Fastify routes.
5
+ *
6
+ * @module patterns/rest
7
+ * @see .context/ADR-P2-2-REST-DETECTION.md
8
+ */
9
+ export type { HTTPMethod, PathParameter, ValidationMiddleware, FastifySchemas, RESTMatchCaptures, ResponseInference, } from './types.js';
10
+ export { parsePath, pathParametersToSchema } from './path-parser.js';
11
+ export { detectExpressMiddleware } from './middleware.js';
12
+ export { inferResponseSchema, detectMultipleResponses } from './response-inference.js';
13
+ export { ExpressPatternMatcher } from './express.js';
14
+ export { FastifyPatternMatcher } from './fastify.js';
15
+ /**
16
+ * Register all REST pattern matchers with the global registry.
17
+ *
18
+ * Call this during application initialization to enable REST detection.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { bootstrapRESTPatterns } from './patterns/rest/index.js';
23
+ *
24
+ * // During app initialization
25
+ * bootstrapRESTPatterns();
26
+ *
27
+ * // Now REST patterns are available for matching
28
+ * ```
29
+ */
30
+ export declare function bootstrapRESTPatterns(): void;
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/patterns/rest/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,YAAY,EACV,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAMpB,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAMvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAUrD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * REST Pattern Detection Module
3
+ *
4
+ * Provides pattern matchers for Express.js and Fastify routes.
5
+ *
6
+ * @module patterns/rest
7
+ * @see .context/ADR-P2-2-REST-DETECTION.md
8
+ */
9
+ /* ═══════════════════════════════════════════════════════════════════════════
10
+ * 🔧 Utility Exports
11
+ * ═══════════════════════════════════════════════════════════════════════════ */
12
+ export { parsePath, pathParametersToSchema } from './path-parser.js';
13
+ export { detectExpressMiddleware } from './middleware.js';
14
+ export { inferResponseSchema, detectMultipleResponses } from './response-inference.js';
15
+ /* ═══════════════════════════════════════════════════════════════════════════
16
+ * 🔍 Matcher Exports
17
+ * ═══════════════════════════════════════════════════════════════════════════ */
18
+ export { ExpressPatternMatcher } from './express.js';
19
+ export { FastifyPatternMatcher } from './fastify.js';
20
+ /* ═══════════════════════════════════════════════════════════════════════════
21
+ * 🚀 Bootstrap
22
+ * ═══════════════════════════════════════════════════════════════════════════ */
23
+ import { registerPattern } from '../registry.js';
24
+ import { ExpressPatternMatcher } from './express.js';
25
+ import { FastifyPatternMatcher } from './fastify.js';
26
+ /**
27
+ * Register all REST pattern matchers with the global registry.
28
+ *
29
+ * Call this during application initialization to enable REST detection.
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * import { bootstrapRESTPatterns } from './patterns/rest/index.js';
34
+ *
35
+ * // During app initialization
36
+ * bootstrapRESTPatterns();
37
+ *
38
+ * // Now REST patterns are available for matching
39
+ * ```
40
+ */
41
+ export function bootstrapRESTPatterns() {
42
+ registerPattern(new ExpressPatternMatcher());
43
+ registerPattern(new FastifyPatternMatcher());
44
+ }
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/patterns/rest/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;iFAEiF;AAEjF,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvF;;iFAEiF;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD;;iFAEiF;AAEjF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,qBAAqB;IACnC,eAAe,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;IAC7C,eAAe,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Middleware Detection
3
+ *
4
+ * Detects validation middleware in Express route handlers.
5
+ *
6
+ * @module patterns/rest/middleware
7
+ * @see .context/ADR-P2-2-REST-DETECTION.md
8
+ */
9
+ import { Node } from 'ts-morph';
10
+ import type { ValidationMiddleware } from './types.js';
11
+ /**
12
+ * Detect validation middleware from a list of route handler arguments.
13
+ *
14
+ * @param args - Array of AST nodes representing route handler arguments
15
+ * @returns Array of detected validation middleware
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // For: app.post('/users', validateBody(CreateUserSchema), handler)
20
+ * const middleware = detectExpressMiddleware(args);
21
+ * // [{ library: 'zod', target: 'body', schemaNode: <node>, middlewareIndex: 1 }]
22
+ * ```
23
+ */
24
+ export declare function detectExpressMiddleware(args: Node[]): ValidationMiddleware[];
25
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/patterns/rest/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAwD,MAAM,UAAU,CAAC;AACtF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAmFvD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,oBAAoB,EAAE,CAiB5E"}