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,159 @@
1
+ /**
2
+ * 📋 tRPC Schema Adapter
3
+ *
4
+ * Extracts and converts tRPC router definitions to NormalizedSchema.
5
+ *
6
+ * This adapter implements the SchemaAdapter interface for tRPC
7
+ * router files. It supports extraction of:
8
+ * - Procedure input schemas (from `.input()` calls)
9
+ * - Procedure output schemas (from `.output()` calls)
10
+ * - Nested router structures
11
+ * - Zod schema validation rules
12
+ *
13
+ * Uses ts-morph for AST analysis, parsing the actual TypeScript
14
+ * source code to extract schema definitions without requiring
15
+ * runtime evaluation.
16
+ *
17
+ * @module adapters/trpc/adapter
18
+ */
19
+ import type { SchemaAdapter, SchemaRef, NormalizedSchema } from '../../core/types.js';
20
+ /**
21
+ * Schema adapter for tRPC router definitions.
22
+ *
23
+ * Implements the SchemaAdapter interface to extract schemas from
24
+ * tRPC router files. Uses ts-morph for AST analysis to parse
25
+ * Zod schemas without runtime evaluation.
26
+ *
27
+ * Supported tRPC patterns:
28
+ * - `t.router({ ... })` - Standard tRPC v10+ pattern
29
+ * - `createTRPCRouter({ ... })` - Next.js/T3 pattern
30
+ * - `createRouter({ ... })` - Legacy pattern
31
+ * - Nested routers via object composition
32
+ *
33
+ * Supported Zod schemas:
34
+ * - Primitives: `z.string()`, `z.number()`, `z.boolean()`
35
+ * - Objects: `z.object({ ... })`
36
+ * - Arrays: `z.array(...)`
37
+ * - Unions: `z.union([...])`, `z.enum([...])`
38
+ * - Modifiers: `.optional()`, `.nullable()`, `.default()`
39
+ * - Constraints: `.min()`, `.max()`, `.email()`, etc.
40
+ *
41
+ * @implements {SchemaAdapter}
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * import { TRPCAdapter } from './adapter.js';
46
+ * import { registerAdapter } from '../registry.js';
47
+ *
48
+ * // Register the adapter
49
+ * registerAdapter(new TRPCAdapter());
50
+ *
51
+ * // Extract procedure input schema
52
+ * const adapter = new TRPCAdapter();
53
+ * const schema = await adapter.extract({
54
+ * source: 'trpc',
55
+ * id: 'trpc:users.getById@./router.ts'
56
+ * });
57
+ *
58
+ * // Extract procedure output schema
59
+ * const outputSchema = await adapter.extract({
60
+ * source: 'trpc',
61
+ * id: 'trpc:users.getById.output@./router.ts'
62
+ * });
63
+ *
64
+ * // List all procedures in a file
65
+ * const refs = await adapter.list('./router.ts');
66
+ * ```
67
+ */
68
+ export declare class TRPCAdapter implements SchemaAdapter {
69
+ /** Adapter kind identifier */
70
+ readonly kind: "trpc";
71
+ /**
72
+ * Check if this adapter supports the given schema reference.
73
+ *
74
+ * @param ref - The schema reference to check
75
+ * @returns True if the ref source is 'trpc'
76
+ */
77
+ supports(ref: SchemaRef): boolean;
78
+ /**
79
+ * Extract a schema from a tRPC procedure.
80
+ *
81
+ * Parses the ref ID to determine the procedure and schema type:
82
+ * - `trpc:{path}@{file}` - Extract input schema (default)
83
+ * - `trpc:{path}.input@{file}` - Extract input schema (explicit)
84
+ * - `trpc:{path}.output@{file}` - Extract output schema
85
+ *
86
+ * The extraction process:
87
+ * 1. Parse the reference ID to get procedure path and schema type
88
+ * 2. Load and parse the TypeScript file with ts-morph
89
+ * 3. Find all router definitions and extract procedures
90
+ * 4. Locate the target procedure by path
91
+ * 5. Convert the Zod schema to NormalizedSchema
92
+ *
93
+ * @param ref - The schema reference specifying what to extract
94
+ * @returns Promise resolving to the normalized schema
95
+ * @throws {Error} If the ref ID is invalid
96
+ * @throws {Error} If the file is not found
97
+ * @throws {Error} If the procedure is not found
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * // Extract input schema (default)
102
+ * const schema = await adapter.extract({
103
+ * source: 'trpc',
104
+ * id: 'trpc:users.getById@./router.ts'
105
+ * });
106
+ *
107
+ * // Extract output schema
108
+ * const outputSchema = await adapter.extract({
109
+ * source: 'trpc',
110
+ * id: 'trpc:users.create.output@./router.ts'
111
+ * });
112
+ *
113
+ * // Access the extracted schema
114
+ * console.log(schema.name); // 'users.getById.input'
115
+ * console.log(schema.properties); // { id: { type: {...}, optional: false, ... } }
116
+ * console.log(schema.required); // ['id']
117
+ * ```
118
+ */
119
+ extract(ref: SchemaRef): Promise<NormalizedSchema>;
120
+ /**
121
+ * List all tRPC procedures in a file.
122
+ *
123
+ * Scans the file for router definitions and returns a SchemaRef
124
+ * for each procedure found. Only returns input schema refs by default,
125
+ * as these are the most commonly needed for validation.
126
+ *
127
+ * The listing process:
128
+ * 1. Load and parse the TypeScript file with ts-morph
129
+ * 2. Find all router definitions (including nested routers)
130
+ * 3. Extract procedure definitions
131
+ * 4. Build SchemaRef IDs for each procedure
132
+ *
133
+ * Handles errors gracefully - returns empty array if file not found
134
+ * or parsing fails, per ADR guidelines.
135
+ *
136
+ * @param basePath - Path to the tRPC router file
137
+ * @returns Promise resolving to array of procedure SchemaRefs
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * const refs = await adapter.list('./server/routers/index.ts');
142
+ * // [
143
+ * // { source: 'trpc', id: 'trpc:users.list@./server/routers/index.ts' },
144
+ * // { source: 'trpc', id: 'trpc:users.getById@./server/routers/index.ts' },
145
+ * // { source: 'trpc', id: 'trpc:users.create@./server/routers/index.ts' },
146
+ * // { source: 'trpc', id: 'trpc:posts.list@./server/routers/index.ts' },
147
+ * // ...
148
+ * // ]
149
+ *
150
+ * // Then extract each schema
151
+ * for (const ref of refs) {
152
+ * const schema = await adapter.extract(ref);
153
+ * console.log(`${schema.name}: ${Object.keys(schema.properties).length} props`);
154
+ * }
155
+ * ```
156
+ */
157
+ list(basePath: string): Promise<SchemaRef[]>;
158
+ }
159
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/trpc/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAc7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBAAa,WAAY,YAAW,aAAa;IAC/C,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO;IAIjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;IACG,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2CxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CA+BnD"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * 📋 tRPC Schema Adapter
3
+ *
4
+ * Extracts and converts tRPC router definitions to NormalizedSchema.
5
+ *
6
+ * This adapter implements the SchemaAdapter interface for tRPC
7
+ * router files. It supports extraction of:
8
+ * - Procedure input schemas (from `.input()` calls)
9
+ * - Procedure output schemas (from `.output()` calls)
10
+ * - Nested router structures
11
+ * - Zod schema validation rules
12
+ *
13
+ * Uses ts-morph for AST analysis, parsing the actual TypeScript
14
+ * source code to extract schema definitions without requiring
15
+ * runtime evaluation.
16
+ *
17
+ * @module adapters/trpc/adapter
18
+ */
19
+ import { existsSync } from 'fs';
20
+ import { parseTRPCRef, buildTRPCRefId } from './parser.js';
21
+ import { createProject, extractProcedures, zodToNormalizedSchema, createEmptySchema, } from './extractor.js';
22
+ // ============================================================================
23
+ // Adapter Implementation
24
+ // ============================================================================
25
+ /**
26
+ * Schema adapter for tRPC router definitions.
27
+ *
28
+ * Implements the SchemaAdapter interface to extract schemas from
29
+ * tRPC router files. Uses ts-morph for AST analysis to parse
30
+ * Zod schemas without runtime evaluation.
31
+ *
32
+ * Supported tRPC patterns:
33
+ * - `t.router({ ... })` - Standard tRPC v10+ pattern
34
+ * - `createTRPCRouter({ ... })` - Next.js/T3 pattern
35
+ * - `createRouter({ ... })` - Legacy pattern
36
+ * - Nested routers via object composition
37
+ *
38
+ * Supported Zod schemas:
39
+ * - Primitives: `z.string()`, `z.number()`, `z.boolean()`
40
+ * - Objects: `z.object({ ... })`
41
+ * - Arrays: `z.array(...)`
42
+ * - Unions: `z.union([...])`, `z.enum([...])`
43
+ * - Modifiers: `.optional()`, `.nullable()`, `.default()`
44
+ * - Constraints: `.min()`, `.max()`, `.email()`, etc.
45
+ *
46
+ * @implements {SchemaAdapter}
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * import { TRPCAdapter } from './adapter.js';
51
+ * import { registerAdapter } from '../registry.js';
52
+ *
53
+ * // Register the adapter
54
+ * registerAdapter(new TRPCAdapter());
55
+ *
56
+ * // Extract procedure input schema
57
+ * const adapter = new TRPCAdapter();
58
+ * const schema = await adapter.extract({
59
+ * source: 'trpc',
60
+ * id: 'trpc:users.getById@./router.ts'
61
+ * });
62
+ *
63
+ * // Extract procedure output schema
64
+ * const outputSchema = await adapter.extract({
65
+ * source: 'trpc',
66
+ * id: 'trpc:users.getById.output@./router.ts'
67
+ * });
68
+ *
69
+ * // List all procedures in a file
70
+ * const refs = await adapter.list('./router.ts');
71
+ * ```
72
+ */
73
+ export class TRPCAdapter {
74
+ /** Adapter kind identifier */
75
+ kind = 'trpc';
76
+ /**
77
+ * Check if this adapter supports the given schema reference.
78
+ *
79
+ * @param ref - The schema reference to check
80
+ * @returns True if the ref source is 'trpc'
81
+ */
82
+ supports(ref) {
83
+ return ref.source === 'trpc';
84
+ }
85
+ /**
86
+ * Extract a schema from a tRPC procedure.
87
+ *
88
+ * Parses the ref ID to determine the procedure and schema type:
89
+ * - `trpc:{path}@{file}` - Extract input schema (default)
90
+ * - `trpc:{path}.input@{file}` - Extract input schema (explicit)
91
+ * - `trpc:{path}.output@{file}` - Extract output schema
92
+ *
93
+ * The extraction process:
94
+ * 1. Parse the reference ID to get procedure path and schema type
95
+ * 2. Load and parse the TypeScript file with ts-morph
96
+ * 3. Find all router definitions and extract procedures
97
+ * 4. Locate the target procedure by path
98
+ * 5. Convert the Zod schema to NormalizedSchema
99
+ *
100
+ * @param ref - The schema reference specifying what to extract
101
+ * @returns Promise resolving to the normalized schema
102
+ * @throws {Error} If the ref ID is invalid
103
+ * @throws {Error} If the file is not found
104
+ * @throws {Error} If the procedure is not found
105
+ *
106
+ * @example
107
+ * ```typescript
108
+ * // Extract input schema (default)
109
+ * const schema = await adapter.extract({
110
+ * source: 'trpc',
111
+ * id: 'trpc:users.getById@./router.ts'
112
+ * });
113
+ *
114
+ * // Extract output schema
115
+ * const outputSchema = await adapter.extract({
116
+ * source: 'trpc',
117
+ * id: 'trpc:users.create.output@./router.ts'
118
+ * });
119
+ *
120
+ * // Access the extracted schema
121
+ * console.log(schema.name); // 'users.getById.input'
122
+ * console.log(schema.properties); // { id: { type: {...}, optional: false, ... } }
123
+ * console.log(schema.required); // ['id']
124
+ * ```
125
+ */
126
+ async extract(ref) {
127
+ const parsed = parseTRPCRef(ref.id);
128
+ if (!parsed) {
129
+ throw new Error(`Invalid tRPC ref ID: ${ref.id}`);
130
+ }
131
+ const { path: procedurePath, schemaType, filePath } = parsed;
132
+ // Check if file exists
133
+ if (!existsSync(filePath)) {
134
+ throw new Error(`File not found: ${filePath}`);
135
+ }
136
+ // Create project and load file
137
+ const project = createProject();
138
+ const sourceFile = project.addSourceFileAtPath(filePath);
139
+ // Extract all procedures
140
+ const procedures = extractProcedures(sourceFile);
141
+ // Find the target procedure
142
+ const procedure = procedures.find(p => p.path.join('.') === procedurePath);
143
+ if (!procedure) {
144
+ throw new Error(`Procedure "${procedurePath}" not found in ${filePath}`);
145
+ }
146
+ // Get the appropriate schema
147
+ const schemaNode = schemaType === 'output'
148
+ ? procedure.outputSchema
149
+ : procedure.inputSchema;
150
+ // Build the schema name
151
+ const schemaName = `${procedurePath}.${schemaType}`;
152
+ if (!schemaNode) {
153
+ // Return empty schema for procedures without explicit input/output
154
+ return createEmptySchema(ref, procedure.location, schemaName);
155
+ }
156
+ return zodToNormalizedSchema(schemaNode, ref, procedure.location, schemaName);
157
+ }
158
+ /**
159
+ * List all tRPC procedures in a file.
160
+ *
161
+ * Scans the file for router definitions and returns a SchemaRef
162
+ * for each procedure found. Only returns input schema refs by default,
163
+ * as these are the most commonly needed for validation.
164
+ *
165
+ * The listing process:
166
+ * 1. Load and parse the TypeScript file with ts-morph
167
+ * 2. Find all router definitions (including nested routers)
168
+ * 3. Extract procedure definitions
169
+ * 4. Build SchemaRef IDs for each procedure
170
+ *
171
+ * Handles errors gracefully - returns empty array if file not found
172
+ * or parsing fails, per ADR guidelines.
173
+ *
174
+ * @param basePath - Path to the tRPC router file
175
+ * @returns Promise resolving to array of procedure SchemaRefs
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * const refs = await adapter.list('./server/routers/index.ts');
180
+ * // [
181
+ * // { source: 'trpc', id: 'trpc:users.list@./server/routers/index.ts' },
182
+ * // { source: 'trpc', id: 'trpc:users.getById@./server/routers/index.ts' },
183
+ * // { source: 'trpc', id: 'trpc:users.create@./server/routers/index.ts' },
184
+ * // { source: 'trpc', id: 'trpc:posts.list@./server/routers/index.ts' },
185
+ * // ...
186
+ * // ]
187
+ *
188
+ * // Then extract each schema
189
+ * for (const ref of refs) {
190
+ * const schema = await adapter.extract(ref);
191
+ * console.log(`${schema.name}: ${Object.keys(schema.properties).length} props`);
192
+ * }
193
+ * ```
194
+ */
195
+ async list(basePath) {
196
+ try {
197
+ // Check if file exists
198
+ if (!existsSync(basePath)) {
199
+ return [];
200
+ }
201
+ // Create project and load file
202
+ const project = createProject();
203
+ const sourceFile = project.addSourceFileAtPath(basePath);
204
+ // Extract all procedures
205
+ const procedures = extractProcedures(sourceFile);
206
+ // Convert to SchemaRefs
207
+ const refs = [];
208
+ for (const proc of procedures) {
209
+ const procPath = proc.path.join('.');
210
+ refs.push({
211
+ source: 'trpc',
212
+ id: buildTRPCRefId(procPath, 'input', basePath),
213
+ });
214
+ }
215
+ return refs;
216
+ }
217
+ catch {
218
+ // Per ADR, list() should handle errors gracefully
219
+ return [];
220
+ }
221
+ }
222
+ }
223
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/trpc/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * 🔧 tRPC Router/Procedure Extractor
3
+ *
4
+ * AST-based extraction of tRPC router definitions and Zod schemas.
5
+ * This module provides utilities to:
6
+ * - Parse TypeScript files containing tRPC routers
7
+ * - Extract procedure definitions (query, mutation, subscription)
8
+ * - Convert Zod schemas to NormalizedSchema format
9
+ *
10
+ * Uses ts-morph for AST analysis, supporting patterns like:
11
+ * - `t.router({ ... })` - Standard tRPC v10+ pattern
12
+ * - `createTRPCRouter({ ... })` - Next.js/T3 pattern
13
+ * - Nested routers via object composition
14
+ *
15
+ * @module adapters/trpc/extractor
16
+ */
17
+ import { Project, Node, CallExpression, SourceFile } from 'ts-morph';
18
+ import type { NormalizedSchema, SchemaRef, SourceLocation } from '../../core/types.js';
19
+ /**
20
+ * Information about an extracted tRPC procedure.
21
+ *
22
+ * Represents a single procedure within a router, including its
23
+ * path (e.g., `["users", "getById"]`), type, and schema AST nodes.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const info: ProcedureInfo = {
28
+ * path: ['users', 'getById'],
29
+ * type: 'query',
30
+ * inputSchema: inputNode,
31
+ * outputSchema: undefined,
32
+ * location: { file: './router.ts', line: 42 }
33
+ * };
34
+ * ```
35
+ */
36
+ export interface ProcedureInfo {
37
+ /** Full path as array (e.g., ["users", "getById"]) */
38
+ path: string[];
39
+ /** Procedure type: query for reads, mutation for writes, subscription for realtime */
40
+ type: 'query' | 'mutation' | 'subscription';
41
+ /** Input schema AST node (from `.input(...)` call), if defined */
42
+ inputSchema?: Node;
43
+ /** Output schema AST node (from `.output(...)` call), if defined */
44
+ outputSchema?: Node;
45
+ /** Source location where the procedure is defined */
46
+ location: SourceLocation;
47
+ }
48
+ /**
49
+ * Create a new ts-morph Project instance for AST analysis.
50
+ *
51
+ * Configures the project without tsconfig to allow standalone
52
+ * file analysis without project-wide compilation context.
53
+ *
54
+ * @returns A new ts-morph Project instance
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * const project = createProject();
59
+ * const sourceFile = project.addSourceFileAtPath('./router.ts');
60
+ * const procedures = extractProcedures(sourceFile);
61
+ * ```
62
+ */
63
+ export declare function createProject(): Project;
64
+ /**
65
+ * Extract all procedures from a tRPC router source file.
66
+ *
67
+ * Scans the file for router definitions and extracts all procedure
68
+ * definitions, including those in nested routers. Each procedure
69
+ * is returned with its full path, type, and schema nodes.
70
+ *
71
+ * Supported patterns:
72
+ * - `t.router({ user: t.procedure.query(...) })`
73
+ * - `createTRPCRouter({ users: userRouter })`
74
+ * - `createRouter({ nested: { deep: procedure } })`
75
+ *
76
+ * @param sourceFile - The ts-morph SourceFile to analyze
77
+ * @returns Array of ProcedureInfo objects for all found procedures
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * const project = createProject();
82
+ * const file = project.addSourceFileAtPath('./server/routers/index.ts');
83
+ * const procedures = extractProcedures(file);
84
+ *
85
+ * for (const proc of procedures) {
86
+ * console.log(`${proc.path.join('.')} - ${proc.type}`);
87
+ * // Output: "users.getById - query"
88
+ * }
89
+ * ```
90
+ */
91
+ export declare function extractProcedures(sourceFile: SourceFile): ProcedureInfo[];
92
+ /**
93
+ * Check if a call expression is a tRPC router call.
94
+ *
95
+ * Matches patterns like:
96
+ * - `t.router(...)` - Method call on object
97
+ * - `trpc.router(...)` - Namespaced call
98
+ * - `createRouter(...)` - Function call
99
+ * - `createTRPCRouter(...)` - T3/Next.js pattern
100
+ *
101
+ * @param node - The AST node to check
102
+ * @returns True if the node is a router call expression
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * sourceFile.forEachDescendant((node) => {
107
+ * if (Node.isCallExpression(node) && isRouterCall(node)) {
108
+ * // Process router definition
109
+ * }
110
+ * });
111
+ * ```
112
+ */
113
+ export declare function isRouterCall(node: Node): node is CallExpression;
114
+ /**
115
+ * Check if a node is a tRPC procedure chain.
116
+ *
117
+ * Procedure chains are method chains that terminate in `.query()`,
118
+ * `.mutation()`, or `.subscription()`. This function walks up the
119
+ * chain to find these terminal methods.
120
+ *
121
+ * @param node - The AST node to check
122
+ * @returns True if the node is a procedure chain
123
+ *
124
+ * @example
125
+ * ```typescript
126
+ * // These would return true:
127
+ * // t.procedure.input(z.string()).query(...)
128
+ * // t.procedure.mutation(...)
129
+ * // publicProcedure.subscription(...)
130
+ * ```
131
+ */
132
+ export declare function isProcedureChain(node: Node | undefined): boolean;
133
+ /**
134
+ * Parse a router object literal and extract all procedures.
135
+ *
136
+ * Recursively processes router definitions, handling:
137
+ * - Direct procedure definitions
138
+ * - Nested router references
139
+ * - Inline nested routers
140
+ *
141
+ * @param routerCall - The router call expression node
142
+ * @param currentPath - Current path prefix for nested routers
143
+ * @param filePath - Path to the source file
144
+ * @returns Array of ProcedureInfo for all found procedures
145
+ */
146
+ export declare function parseRouterObject(routerCall: CallExpression, currentPath: string[], filePath: string): ProcedureInfo[];
147
+ /**
148
+ * Parse a procedure method chain to extract input/output schemas.
149
+ *
150
+ * Walks the method chain (`.input().output().query()`) and extracts:
151
+ * - Input schema from `.input(zodSchema)`
152
+ * - Output schema from `.output(zodSchema)`
153
+ * - Procedure type from terminal method (`.query()`, `.mutation()`, `.subscription()`)
154
+ *
155
+ * @param node - The procedure chain call expression
156
+ * @param path - Full path to this procedure
157
+ * @param filePath - Path to the source file
158
+ * @returns ProcedureInfo or null if parsing fails
159
+ *
160
+ * @example
161
+ * ```typescript
162
+ * // For: t.procedure.input(z.object({ id: z.string() })).query(...)
163
+ * // Returns: { path: ['getById'], type: 'query', inputSchema: <Node>, ... }
164
+ * ```
165
+ */
166
+ export declare function parseProcedureChain(node: Node, path: string[], filePath: string): ProcedureInfo | null;
167
+ /**
168
+ * Convert a Zod schema AST node to NormalizedSchema.
169
+ *
170
+ * Parses Zod schema definitions and converts them to the framework's
171
+ * NormalizedSchema format. Supports common Zod types:
172
+ * - Primitives: `z.string()`, `z.number()`, `z.boolean()`
173
+ * - Objects: `z.object({ ... })`
174
+ * - Arrays: `z.array(...)`
175
+ * - Unions: `z.union([...])`, `z.enum([...])`
176
+ * - Modifiers: `.optional()`, `.nullable()`, `.default()`
177
+ * - Constraints: `.min()`, `.max()`, `.email()`, etc.
178
+ *
179
+ * @param node - The AST node containing the Zod schema
180
+ * @param ref - The SchemaRef for source tracking
181
+ * @param location - Source location for error reporting
182
+ * @param name - Optional schema name
183
+ * @returns The converted NormalizedSchema
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * const schema = zodToNormalizedSchema(
188
+ * inputSchemaNode,
189
+ * { source: 'trpc', id: 'trpc:users.create@./router.ts' },
190
+ * { file: './router.ts', line: 42 },
191
+ * 'users.create.input'
192
+ * );
193
+ * ```
194
+ */
195
+ export declare function zodToNormalizedSchema(node: Node, ref: SchemaRef, location: SourceLocation, name?: string): NormalizedSchema;
196
+ /**
197
+ * Create an empty NormalizedSchema.
198
+ *
199
+ * Used for procedures without explicit input or output schemas.
200
+ * Returns a valid schema with empty properties.
201
+ *
202
+ * @param ref - The SchemaRef for source tracking
203
+ * @param location - Source location for error reporting
204
+ * @param name - Optional schema name
205
+ * @returns An empty NormalizedSchema
206
+ *
207
+ * @example
208
+ * ```typescript
209
+ * // For a procedure with no .input() call
210
+ * const emptyInput = createEmptySchema(
211
+ * ref,
212
+ * { file: './router.ts', line: 10 },
213
+ * 'users.list.input'
214
+ * );
215
+ * ```
216
+ */
217
+ export declare function createEmptySchema(ref: SchemaRef, location: SourceLocation, name?: string): NormalizedSchema;
218
+ //# sourceMappingURL=extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../../src/adapters/trpc/extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,OAAO,EACP,IAAI,EACJ,cAAc,EACd,UAAU,EAGX,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,gBAAgB,EAGhB,SAAS,EACT,cAAc,EAEf,MAAM,qBAAqB,CAAC;AAM7B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,sFAAsF;IACtF,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IAC5C,kEAAkE;IAClE,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,oEAAoE;IACpE,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,qDAAqD;IACrD,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAKvC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,EAAE,CAazE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,cAAc,CAiB/D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,CAyBhE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,cAAc,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CAsCjB;AAwDD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,EAAE,MAAM,GACf,aAAa,GAAG,IAAI,CA2DtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE,MAAM,GACZ,gBAAgB,CAgClB;AA0TD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE,MAAM,GACZ,gBAAgB,CAQlB"}