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,95 @@
1
+ /**
2
+ * 🔗 OpenAPI Ref Parser
3
+ * Parses and builds SchemaRef ID strings for the OpenAPI adapter
4
+ *
5
+ * The OpenAPI adapter uses structured reference IDs to identify
6
+ * specific parts of an OpenAPI specification. This module provides
7
+ * utilities to parse these IDs and reconstruct them from components.
8
+ *
9
+ * @module adapters/openapi/parser
10
+ */
11
+ /**
12
+ * Parsed components of an OpenAPI reference ID.
13
+ *
14
+ * Reference IDs encode the type, location, and spec path:
15
+ * - `file` - Entire spec file
16
+ * - `endpoint` - Full endpoint (request + responses)
17
+ * - `request` - Request body schema only
18
+ * - `response` - Specific response by status code
19
+ * - `schema` - Named component schema
20
+ */
21
+ export interface OpenAPIRef {
22
+ /** The type of reference being accessed */
23
+ type: 'file' | 'endpoint' | 'request' | 'response' | 'schema';
24
+ /** HTTP method (GET, POST, etc.) - for endpoint/request/response types */
25
+ method?: string;
26
+ /** API path (e.g., /users/{id}) - for endpoint/request/response types */
27
+ path?: string;
28
+ /** Response status code (e.g., 200, 404) - for response type only */
29
+ statusCode?: string;
30
+ /** Component schema name - for schema type only */
31
+ schemaName?: string;
32
+ /** Path to the OpenAPI specification file */
33
+ specPath: string;
34
+ }
35
+ /**
36
+ * Parse an OpenAPI SchemaRef ID string into its components.
37
+ *
38
+ * ID formats by type:
39
+ * - `endpoint:METHOD:/path@specPath` - Full endpoint
40
+ * - `request:METHOD:/path@specPath` - Request body only
41
+ * - `response:METHOD:/path:statusCode@specPath` - Specific response
42
+ * - `schema:SchemaName@specPath` - Component schema
43
+ * - `file:specPath` - Entire spec file
44
+ *
45
+ * @param refId - The reference ID string to parse
46
+ * @returns Parsed reference object, or null if the ID is invalid
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * // Parse an endpoint reference
51
+ * const ref = parseOpenAPIRef('endpoint:GET:/users/{id}@./api.yaml');
52
+ * // { type: 'endpoint', method: 'GET', path: '/users/{id}', specPath: './api.yaml' }
53
+ *
54
+ * // Parse a response reference
55
+ * const ref = parseOpenAPIRef('response:POST:/users:201@./api.yaml');
56
+ * // { type: 'response', method: 'POST', path: '/users', statusCode: '201', specPath: './api.yaml' }
57
+ *
58
+ * // Parse a component schema reference
59
+ * const ref = parseOpenAPIRef('schema:User@./api.yaml');
60
+ * // { type: 'schema', schemaName: 'User', specPath: './api.yaml' }
61
+ * ```
62
+ */
63
+ export declare function parseOpenAPIRef(refId: string): OpenAPIRef | null;
64
+ /**
65
+ * Build an OpenAPI SchemaRef ID string from its components.
66
+ *
67
+ * This is the inverse of `parseOpenAPIRef` - it takes parsed
68
+ * components and constructs a valid reference ID string.
69
+ *
70
+ * @param ref - The OpenAPIRef components to encode
71
+ * @returns The formatted ID string
72
+ * @throws {Error} If the ref type is unknown
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * // Build an endpoint reference
77
+ * const id = buildOpenAPIRefId({
78
+ * type: 'endpoint',
79
+ * method: 'GET',
80
+ * path: '/users/{id}',
81
+ * specPath: './api.yaml'
82
+ * });
83
+ * // 'endpoint:GET:/users/{id}@./api.yaml'
84
+ *
85
+ * // Build a schema reference
86
+ * const id = buildOpenAPIRefId({
87
+ * type: 'schema',
88
+ * schemaName: 'User',
89
+ * specPath: './api.yaml'
90
+ * });
91
+ * // 'schema:User@./api.yaml'
92
+ * ```
93
+ */
94
+ export declare function buildOpenAPIRefId(ref: OpenAPIRef): string;
95
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/adapters/openapi/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAE9D,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAmGhE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAoBzD"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * 🔗 OpenAPI Ref Parser
3
+ * Parses and builds SchemaRef ID strings for the OpenAPI adapter
4
+ *
5
+ * The OpenAPI adapter uses structured reference IDs to identify
6
+ * specific parts of an OpenAPI specification. This module provides
7
+ * utilities to parse these IDs and reconstruct them from components.
8
+ *
9
+ * @module adapters/openapi/parser
10
+ */
11
+ /** Valid reference type identifiers */
12
+ const VALID_TYPES = ['file', 'endpoint', 'request', 'response', 'schema'];
13
+ /**
14
+ * Parse an OpenAPI SchemaRef ID string into its components.
15
+ *
16
+ * ID formats by type:
17
+ * - `endpoint:METHOD:/path@specPath` - Full endpoint
18
+ * - `request:METHOD:/path@specPath` - Request body only
19
+ * - `response:METHOD:/path:statusCode@specPath` - Specific response
20
+ * - `schema:SchemaName@specPath` - Component schema
21
+ * - `file:specPath` - Entire spec file
22
+ *
23
+ * @param refId - The reference ID string to parse
24
+ * @returns Parsed reference object, or null if the ID is invalid
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * // Parse an endpoint reference
29
+ * const ref = parseOpenAPIRef('endpoint:GET:/users/{id}@./api.yaml');
30
+ * // { type: 'endpoint', method: 'GET', path: '/users/{id}', specPath: './api.yaml' }
31
+ *
32
+ * // Parse a response reference
33
+ * const ref = parseOpenAPIRef('response:POST:/users:201@./api.yaml');
34
+ * // { type: 'response', method: 'POST', path: '/users', statusCode: '201', specPath: './api.yaml' }
35
+ *
36
+ * // Parse a component schema reference
37
+ * const ref = parseOpenAPIRef('schema:User@./api.yaml');
38
+ * // { type: 'schema', schemaName: 'User', specPath: './api.yaml' }
39
+ * ```
40
+ */
41
+ export function parseOpenAPIRef(refId) {
42
+ if (!refId || refId.length === 0) {
43
+ return null;
44
+ }
45
+ // Find the @ separator (last occurrence for spec path)
46
+ const atIndex = refId.lastIndexOf('@');
47
+ // Find the first colon (type separator)
48
+ const colonIndex = refId.indexOf(':');
49
+ if (colonIndex === -1) {
50
+ return null;
51
+ }
52
+ const type = refId.slice(0, colonIndex);
53
+ if (!VALID_TYPES.includes(type)) {
54
+ return null;
55
+ }
56
+ // Handle file type specially (format: file:path)
57
+ if (type === 'file') {
58
+ const specPath = refId.slice(colonIndex + 1);
59
+ if (!specPath) {
60
+ return null;
61
+ }
62
+ return { type: 'file', specPath };
63
+ }
64
+ // All other types require @ separator for spec path
65
+ if (atIndex === -1) {
66
+ return null;
67
+ }
68
+ const specPath = refId.slice(atIndex + 1);
69
+ const identifier = refId.slice(colonIndex + 1, atIndex);
70
+ if (!specPath) {
71
+ return null;
72
+ }
73
+ switch (type) {
74
+ case 'schema': {
75
+ // Format: schema:SchemaName@specPath
76
+ return {
77
+ type: 'schema',
78
+ schemaName: identifier,
79
+ specPath,
80
+ };
81
+ }
82
+ case 'endpoint':
83
+ case 'request': {
84
+ // Format: type:METHOD:/path@specPath
85
+ const methodEnd = identifier.indexOf(':');
86
+ if (methodEnd === -1) {
87
+ return null;
88
+ }
89
+ const method = identifier.slice(0, methodEnd);
90
+ const path = decodeURIComponent(identifier.slice(methodEnd + 1));
91
+ return {
92
+ type,
93
+ method,
94
+ path,
95
+ specPath,
96
+ };
97
+ }
98
+ case 'response': {
99
+ // Format: response:METHOD:/path:statusCode@specPath
100
+ const methodEnd = identifier.indexOf(':');
101
+ if (methodEnd === -1) {
102
+ return null;
103
+ }
104
+ const method = identifier.slice(0, methodEnd);
105
+ const restPart = identifier.slice(methodEnd + 1);
106
+ // Find the last colon for status code
107
+ const lastColon = restPart.lastIndexOf(':');
108
+ if (lastColon === -1) {
109
+ return null;
110
+ }
111
+ const path = decodeURIComponent(restPart.slice(0, lastColon));
112
+ const statusCode = restPart.slice(lastColon + 1);
113
+ return {
114
+ type: 'response',
115
+ method,
116
+ path,
117
+ statusCode,
118
+ specPath,
119
+ };
120
+ }
121
+ default:
122
+ return null;
123
+ }
124
+ }
125
+ /**
126
+ * Build an OpenAPI SchemaRef ID string from its components.
127
+ *
128
+ * This is the inverse of `parseOpenAPIRef` - it takes parsed
129
+ * components and constructs a valid reference ID string.
130
+ *
131
+ * @param ref - The OpenAPIRef components to encode
132
+ * @returns The formatted ID string
133
+ * @throws {Error} If the ref type is unknown
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * // Build an endpoint reference
138
+ * const id = buildOpenAPIRefId({
139
+ * type: 'endpoint',
140
+ * method: 'GET',
141
+ * path: '/users/{id}',
142
+ * specPath: './api.yaml'
143
+ * });
144
+ * // 'endpoint:GET:/users/{id}@./api.yaml'
145
+ *
146
+ * // Build a schema reference
147
+ * const id = buildOpenAPIRefId({
148
+ * type: 'schema',
149
+ * schemaName: 'User',
150
+ * specPath: './api.yaml'
151
+ * });
152
+ * // 'schema:User@./api.yaml'
153
+ * ```
154
+ */
155
+ export function buildOpenAPIRefId(ref) {
156
+ const { type, method, path, statusCode, schemaName, specPath } = ref;
157
+ switch (type) {
158
+ case 'file':
159
+ return `file:${specPath}`;
160
+ case 'schema':
161
+ return `schema:${schemaName}@${specPath}`;
162
+ case 'endpoint':
163
+ case 'request':
164
+ return `${type}:${method}:${path}@${specPath}`;
165
+ case 'response':
166
+ return `response:${method}:${path}:${statusCode}@${specPath}`;
167
+ default:
168
+ throw new Error(`Unknown OpenAPI ref type: ${type}`);
169
+ }
170
+ }
171
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/adapters/openapi/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgCH,uCAAuC;AACvC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAU,CAAC;AAEnF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uDAAuD;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEvC,wCAAwC;IACxC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAuB,CAAC;IAE9D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iDAAiD;IACjD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACpC,CAAC;IAED,oDAAoD;IACpD,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAExD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,qCAAqC;YACrC,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,UAAU;gBACtB,QAAQ;aACT,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,qCAAqC;YACrC,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;YACjE,OAAO;gBACL,IAAI;gBACJ,MAAM;gBACN,IAAI;gBACJ,QAAQ;aACT,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,oDAAoD;YACpD,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YAEjD,sCAAsC;YACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YAC9D,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YAEjD,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,MAAM;gBACN,IAAI;gBACJ,UAAU;gBACV,QAAQ;aACT,CAAC;QACJ,CAAC;QAED;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAe;IAC/C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IAErE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,QAAQ,QAAQ,EAAE,CAAC;QAE5B,KAAK,QAAQ;YACX,OAAO,UAAU,UAAU,IAAI,QAAQ,EAAE,CAAC;QAE5C,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,GAAG,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;QAEjD,KAAK,UAAU;YACb,OAAO,YAAY,MAAM,IAAI,IAAI,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QAEhE;YACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * 📦 Adapter Registry
3
+ * Central registry for managing schema adapters with validation and lookup
4
+ *
5
+ * @module adapters/registry
6
+ */
7
+ import type { SchemaAdapter, SchemaRef, NormalizedSchema, SchemaSourceKind } from '../core/types.js';
8
+ /**
9
+ * Register a schema adapter.
10
+ *
11
+ * The adapter is validated before registration. If an adapter for
12
+ * the same kind already exists, it is replaced (last-wins semantics).
13
+ *
14
+ * @param adapter - The schema adapter to register
15
+ * @throws {AdapterValidationError} If the adapter is invalid
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * registerAdapter(new MCPAdapter());
20
+ * ```
21
+ */
22
+ export declare function registerAdapter(adapter: SchemaAdapter): void;
23
+ /**
24
+ * Get a registered adapter by kind.
25
+ *
26
+ * @param kind - The schema source kind to look up
27
+ * @returns The registered adapter
28
+ * @throws {AdapterNotFoundError} If no adapter is registered for the kind
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const adapter = getAdapter('mcp');
33
+ * ```
34
+ */
35
+ export declare function getAdapter(kind: SchemaSourceKind): SchemaAdapter;
36
+ /**
37
+ * Check if an adapter is registered for a kind.
38
+ *
39
+ * @param kind - The schema source kind to check
40
+ * @returns True if an adapter is registered
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * if (hasAdapter('mcp')) {
45
+ * console.log('MCP adapter available');
46
+ * }
47
+ * ```
48
+ */
49
+ export declare function hasAdapter(kind: SchemaSourceKind): boolean;
50
+ /**
51
+ * List all registered adapter kinds.
52
+ *
53
+ * @returns Array of registered schema source kinds
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * const kinds = listAdapters();
58
+ * console.log('Available:', kinds.join(', '));
59
+ * ```
60
+ */
61
+ export declare function listAdapters(): SchemaSourceKind[];
62
+ /**
63
+ * Get an adapter that supports a given schema ref.
64
+ *
65
+ * @param ref - The schema reference to find an adapter for
66
+ * @returns The adapter that supports the ref
67
+ * @throws {AdapterNotFoundError} If no adapter supports the ref
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const ref: SchemaRef = { source: 'mcp', id: 'tool:get_weather' };
72
+ * const adapter = getAdapterForRef(ref);
73
+ * ```
74
+ */
75
+ export declare function getAdapterForRef(ref: SchemaRef): SchemaAdapter;
76
+ /**
77
+ * Extract a schema using the appropriate adapter.
78
+ *
79
+ * Automatically selects the adapter based on the ref's source kind
80
+ * and delegates extraction to that adapter.
81
+ *
82
+ * @param ref - The schema reference to extract
83
+ * @returns Promise resolving to the normalized schema
84
+ * @throws {AdapterNotFoundError} If no adapter supports the ref
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * const schema = await extractSchema({
89
+ * source: 'mcp',
90
+ * id: 'tool:get_weather'
91
+ * });
92
+ * ```
93
+ */
94
+ export declare function extractSchema(ref: SchemaRef): Promise<NormalizedSchema>;
95
+ /**
96
+ * List available schemas using the appropriate adapter.
97
+ *
98
+ * Not all adapters support listing. This function throws if
99
+ * the adapter doesn't implement the list() method.
100
+ *
101
+ * @param kind - The schema source kind
102
+ * @param basePath - Base path to search for schemas
103
+ * @returns Promise resolving to array of schema refs
104
+ * @throws {AdapterNotFoundError} If no adapter is registered for the kind
105
+ * @throws {Error} If the adapter doesn't support listing
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * const refs = await listSchemas('mcp', './src');
110
+ * for (const ref of refs) {
111
+ * console.log(`Found: ${ref.id}`);
112
+ * }
113
+ * ```
114
+ */
115
+ export declare function listSchemas(kind: SchemaSourceKind, basePath: string): Promise<SchemaRef[]>;
116
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA4HrG;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAE5D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,gBAAgB,GAAG,aAAa,CAEhE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAE1D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,IAAI,gBAAgB,EAAE,CAEjD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,aAAa,CAE9D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAQ7E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAYhG"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * 📦 Adapter Registry
3
+ * Central registry for managing schema adapters with validation and lookup
4
+ *
5
+ * @module adapters/registry
6
+ */
7
+ import { AdapterNotFoundError, AdapterValidationError } from './errors.js';
8
+ /**
9
+ * Internal registry class that manages schema adapters.
10
+ *
11
+ * Provides validated registration, lookup by kind, and ref-based
12
+ * adapter resolution. Uses last-wins semantics for replacement.
13
+ */
14
+ class AdapterRegistry {
15
+ adapters = new Map();
16
+ /**
17
+ * Register an adapter with validation.
18
+ *
19
+ * Validates the adapter interface before registration.
20
+ * If an adapter for the same kind exists, it is replaced (last-wins).
21
+ *
22
+ * @param adapter - The schema adapter to register
23
+ * @throws {AdapterValidationError} If the adapter is missing required properties
24
+ */
25
+ register(adapter) {
26
+ this.validateAdapter(adapter);
27
+ if (this.adapters.has(adapter.kind) && process.env.DEBUG_TRACE_MCP) {
28
+ console.error(`[AdapterRegistry] Overwriting adapter for kind: ${adapter.kind}`);
29
+ }
30
+ this.adapters.set(adapter.kind, adapter);
31
+ if (process.env.DEBUG_TRACE_MCP) {
32
+ console.error(`[AdapterRegistry] Registered adapter: ${adapter.kind}`);
33
+ }
34
+ }
35
+ /**
36
+ * Get an adapter by its kind.
37
+ *
38
+ * @param kind - The schema source kind to look up
39
+ * @returns The registered adapter for the kind
40
+ * @throws {AdapterNotFoundError} If no adapter is registered for the kind
41
+ */
42
+ get(kind) {
43
+ const adapter = this.adapters.get(kind);
44
+ if (!adapter) {
45
+ throw new AdapterNotFoundError(kind, this.list());
46
+ }
47
+ return adapter;
48
+ }
49
+ /**
50
+ * Check if an adapter is registered for a kind.
51
+ *
52
+ * @param kind - The schema source kind to check
53
+ * @returns True if an adapter is registered
54
+ */
55
+ has(kind) {
56
+ return this.adapters.has(kind);
57
+ }
58
+ /**
59
+ * List all registered adapter kinds.
60
+ *
61
+ * @returns Array of registered schema source kinds
62
+ */
63
+ list() {
64
+ return Array.from(this.adapters.keys());
65
+ }
66
+ /**
67
+ * Get an adapter that supports a given schema ref.
68
+ *
69
+ * Looks up the adapter by the ref's source kind and verifies
70
+ * that the adapter supports the specific ref.
71
+ *
72
+ * @param ref - The schema reference to find an adapter for
73
+ * @returns The adapter that supports the ref
74
+ * @throws {AdapterNotFoundError} If no adapter supports the ref
75
+ */
76
+ getForRef(ref) {
77
+ const adapter = this.adapters.get(ref.source);
78
+ if (adapter && adapter.supports(ref)) {
79
+ return adapter;
80
+ }
81
+ throw new AdapterNotFoundError(ref.source, this.list());
82
+ }
83
+ /**
84
+ * Validate adapter before registration.
85
+ *
86
+ * Ensures the adapter has all required properties and methods:
87
+ * - kind: string identifier
88
+ * - supports(): function to check ref compatibility
89
+ * - extract(): function to extract schemas
90
+ * - list() (optional): function to list available refs
91
+ *
92
+ * @param adapter - The adapter to validate
93
+ * @throws {AdapterValidationError} If validation fails
94
+ */
95
+ validateAdapter(adapter) {
96
+ const partial = adapter;
97
+ if (!partial.kind || typeof partial.kind !== 'string') {
98
+ throw new AdapterValidationError(partial, 'kind is required and must be a string');
99
+ }
100
+ if (typeof partial.supports !== 'function') {
101
+ throw new AdapterValidationError(partial, 'supports() must be a function');
102
+ }
103
+ if (typeof partial.extract !== 'function') {
104
+ throw new AdapterValidationError(partial, 'extract() must be a function');
105
+ }
106
+ if (partial.list !== undefined && typeof partial.list !== 'function') {
107
+ throw new AdapterValidationError(partial, 'list() must be a function if defined');
108
+ }
109
+ }
110
+ }
111
+ // Singleton instance
112
+ const registry = new AdapterRegistry();
113
+ /**
114
+ * Register a schema adapter.
115
+ *
116
+ * The adapter is validated before registration. If an adapter for
117
+ * the same kind already exists, it is replaced (last-wins semantics).
118
+ *
119
+ * @param adapter - The schema adapter to register
120
+ * @throws {AdapterValidationError} If the adapter is invalid
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * registerAdapter(new MCPAdapter());
125
+ * ```
126
+ */
127
+ export function registerAdapter(adapter) {
128
+ registry.register(adapter);
129
+ }
130
+ /**
131
+ * Get a registered adapter by kind.
132
+ *
133
+ * @param kind - The schema source kind to look up
134
+ * @returns The registered adapter
135
+ * @throws {AdapterNotFoundError} If no adapter is registered for the kind
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * const adapter = getAdapter('mcp');
140
+ * ```
141
+ */
142
+ export function getAdapter(kind) {
143
+ return registry.get(kind);
144
+ }
145
+ /**
146
+ * Check if an adapter is registered for a kind.
147
+ *
148
+ * @param kind - The schema source kind to check
149
+ * @returns True if an adapter is registered
150
+ *
151
+ * @example
152
+ * ```typescript
153
+ * if (hasAdapter('mcp')) {
154
+ * console.log('MCP adapter available');
155
+ * }
156
+ * ```
157
+ */
158
+ export function hasAdapter(kind) {
159
+ return registry.has(kind);
160
+ }
161
+ /**
162
+ * List all registered adapter kinds.
163
+ *
164
+ * @returns Array of registered schema source kinds
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * const kinds = listAdapters();
169
+ * console.log('Available:', kinds.join(', '));
170
+ * ```
171
+ */
172
+ export function listAdapters() {
173
+ return registry.list();
174
+ }
175
+ /**
176
+ * Get an adapter that supports a given schema ref.
177
+ *
178
+ * @param ref - The schema reference to find an adapter for
179
+ * @returns The adapter that supports the ref
180
+ * @throws {AdapterNotFoundError} If no adapter supports the ref
181
+ *
182
+ * @example
183
+ * ```typescript
184
+ * const ref: SchemaRef = { source: 'mcp', id: 'tool:get_weather' };
185
+ * const adapter = getAdapterForRef(ref);
186
+ * ```
187
+ */
188
+ export function getAdapterForRef(ref) {
189
+ return registry.getForRef(ref);
190
+ }
191
+ /**
192
+ * Extract a schema using the appropriate adapter.
193
+ *
194
+ * Automatically selects the adapter based on the ref's source kind
195
+ * and delegates extraction to that adapter.
196
+ *
197
+ * @param ref - The schema reference to extract
198
+ * @returns Promise resolving to the normalized schema
199
+ * @throws {AdapterNotFoundError} If no adapter supports the ref
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * const schema = await extractSchema({
204
+ * source: 'mcp',
205
+ * id: 'tool:get_weather'
206
+ * });
207
+ * ```
208
+ */
209
+ export async function extractSchema(ref) {
210
+ const adapter = getAdapterForRef(ref);
211
+ if (process.env.DEBUG_TRACE_MCP) {
212
+ console.error(`[AdapterRegistry] Extracting schema: ${ref.id} via ${adapter.kind}`);
213
+ }
214
+ return adapter.extract(ref);
215
+ }
216
+ /**
217
+ * List available schemas using the appropriate adapter.
218
+ *
219
+ * Not all adapters support listing. This function throws if
220
+ * the adapter doesn't implement the list() method.
221
+ *
222
+ * @param kind - The schema source kind
223
+ * @param basePath - Base path to search for schemas
224
+ * @returns Promise resolving to array of schema refs
225
+ * @throws {AdapterNotFoundError} If no adapter is registered for the kind
226
+ * @throws {Error} If the adapter doesn't support listing
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * const refs = await listSchemas('mcp', './src');
231
+ * for (const ref of refs) {
232
+ * console.log(`Found: ${ref.id}`);
233
+ * }
234
+ * ```
235
+ */
236
+ export async function listSchemas(kind, basePath) {
237
+ const adapter = getAdapter(kind);
238
+ if (!adapter.list) {
239
+ throw new Error(`Adapter for kind "${kind}" does not support list() method`);
240
+ }
241
+ if (process.env.DEBUG_TRACE_MCP) {
242
+ console.error(`[AdapterRegistry] Listing schemas via ${kind} in ${basePath}`);
243
+ }
244
+ return adapter.list(basePath);
245
+ }
246
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"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"}