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.
- package/LICENSE +21 -0
- package/README.md +1662 -0
- package/dist/adapters/bootstrap.d.ts +29 -0
- package/dist/adapters/bootstrap.d.ts.map +1 -0
- package/dist/adapters/bootstrap.js +46 -0
- package/dist/adapters/bootstrap.js.map +1 -0
- package/dist/adapters/errors.d.ts +94 -0
- package/dist/adapters/errors.d.ts.map +1 -0
- package/dist/adapters/errors.js +107 -0
- package/dist/adapters/errors.js.map +1 -0
- package/dist/adapters/graphql/index.d.ts +9 -0
- package/dist/adapters/graphql/index.d.ts.map +1 -0
- package/dist/adapters/graphql/index.js +9 -0
- package/dist/adapters/graphql/index.js.map +1 -0
- package/dist/adapters/graphql/sdl-parser.d.ts +74 -0
- package/dist/adapters/graphql/sdl-parser.d.ts.map +1 -0
- package/dist/adapters/graphql/sdl-parser.js +559 -0
- package/dist/adapters/graphql/sdl-parser.js.map +1 -0
- package/dist/adapters/grpc/adapter.d.ts +76 -0
- package/dist/adapters/grpc/adapter.d.ts.map +1 -0
- package/dist/adapters/grpc/adapter.js +362 -0
- package/dist/adapters/grpc/adapter.js.map +1 -0
- package/dist/adapters/grpc/index.d.ts +10 -0
- package/dist/adapters/grpc/index.d.ts.map +1 -0
- package/dist/adapters/grpc/index.js +12 -0
- package/dist/adapters/grpc/index.js.map +1 -0
- package/dist/adapters/grpc/proto-parser.d.ts +76 -0
- package/dist/adapters/grpc/proto-parser.d.ts.map +1 -0
- package/dist/adapters/grpc/proto-parser.js +523 -0
- package/dist/adapters/grpc/proto-parser.js.map +1 -0
- package/dist/adapters/grpc/type-converter.d.ts +43 -0
- package/dist/adapters/grpc/type-converter.d.ts.map +1 -0
- package/dist/adapters/grpc/type-converter.js +270 -0
- package/dist/adapters/grpc/type-converter.js.map +1 -0
- package/dist/adapters/grpc/types.d.ts +85 -0
- package/dist/adapters/grpc/types.d.ts.map +1 -0
- package/dist/adapters/grpc/types.js +7 -0
- package/dist/adapters/grpc/types.js.map +1 -0
- package/dist/adapters/index.d.ts +39 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +50 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/mcp.d.ts +23 -0
- package/dist/adapters/mcp.d.ts.map +1 -0
- package/dist/adapters/mcp.js +293 -0
- package/dist/adapters/mcp.js.map +1 -0
- package/dist/adapters/openapi/adapter.d.ts +213 -0
- package/dist/adapters/openapi/adapter.d.ts.map +1 -0
- package/dist/adapters/openapi/adapter.js +557 -0
- package/dist/adapters/openapi/adapter.js.map +1 -0
- package/dist/adapters/openapi/convert.d.ts +120 -0
- package/dist/adapters/openapi/convert.d.ts.map +1 -0
- package/dist/adapters/openapi/convert.js +363 -0
- package/dist/adapters/openapi/convert.js.map +1 -0
- package/dist/adapters/openapi/index.d.ts +39 -0
- package/dist/adapters/openapi/index.d.ts.map +1 -0
- package/dist/adapters/openapi/index.js +48 -0
- package/dist/adapters/openapi/index.js.map +1 -0
- package/dist/adapters/openapi/parser.d.ts +95 -0
- package/dist/adapters/openapi/parser.d.ts.map +1 -0
- package/dist/adapters/openapi/parser.js +171 -0
- package/dist/adapters/openapi/parser.js.map +1 -0
- package/dist/adapters/registry.d.ts +116 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/adapters/registry.js +246 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/trpc/adapter.d.ts +159 -0
- package/dist/adapters/trpc/adapter.d.ts.map +1 -0
- package/dist/adapters/trpc/adapter.js +223 -0
- package/dist/adapters/trpc/adapter.js.map +1 -0
- package/dist/adapters/trpc/extractor.d.ts +218 -0
- package/dist/adapters/trpc/extractor.d.ts.map +1 -0
- package/dist/adapters/trpc/extractor.js +708 -0
- package/dist/adapters/trpc/extractor.js.map +1 -0
- package/dist/adapters/trpc/index.d.ts +31 -0
- package/dist/adapters/trpc/index.d.ts.map +1 -0
- package/dist/adapters/trpc/index.js +40 -0
- package/dist/adapters/trpc/index.js.map +1 -0
- package/dist/adapters/trpc/parser.d.ts +119 -0
- package/dist/adapters/trpc/parser.d.ts.map +1 -0
- package/dist/adapters/trpc/parser.js +128 -0
- package/dist/adapters/trpc/parser.js.map +1 -0
- package/dist/compare/index.d.ts +33 -0
- package/dist/compare/index.d.ts.map +1 -0
- package/dist/compare/index.js +261 -0
- package/dist/compare/index.js.map +1 -0
- package/dist/core/types.d.ts +188 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -0
- package/dist/extract/index.d.ts +26 -0
- package/dist/extract/index.d.ts.map +1 -0
- package/dist/extract/index.js +44 -0
- package/dist/extract/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +674 -0
- package/dist/index.js.map +1 -0
- package/dist/languages/base.d.ts +57 -0
- package/dist/languages/base.d.ts.map +1 -0
- package/dist/languages/base.js +6 -0
- package/dist/languages/base.js.map +1 -0
- package/dist/languages/bootstrap.d.ts +10 -0
- package/dist/languages/bootstrap.d.ts.map +1 -0
- package/dist/languages/bootstrap.js +25 -0
- package/dist/languages/bootstrap.js.map +1 -0
- package/dist/languages/go/handlers/chi.d.ts +24 -0
- package/dist/languages/go/handlers/chi.d.ts.map +1 -0
- package/dist/languages/go/handlers/chi.js +205 -0
- package/dist/languages/go/handlers/chi.js.map +1 -0
- package/dist/languages/go/handlers/gin.d.ts +24 -0
- package/dist/languages/go/handlers/gin.d.ts.map +1 -0
- package/dist/languages/go/handlers/gin.js +156 -0
- package/dist/languages/go/handlers/gin.js.map +1 -0
- package/dist/languages/go/handlers/stdlib.d.ts +19 -0
- package/dist/languages/go/handlers/stdlib.d.ts.map +1 -0
- package/dist/languages/go/handlers/stdlib.js +112 -0
- package/dist/languages/go/handlers/stdlib.js.map +1 -0
- package/dist/languages/go/index.d.ts +18 -0
- package/dist/languages/go/index.d.ts.map +1 -0
- package/dist/languages/go/index.js +20 -0
- package/dist/languages/go/index.js.map +1 -0
- package/dist/languages/go/parser.d.ts +33 -0
- package/dist/languages/go/parser.d.ts.map +1 -0
- package/dist/languages/go/parser.js +95 -0
- package/dist/languages/go/parser.js.map +1 -0
- package/dist/languages/go/struct-extractor.d.ts +59 -0
- package/dist/languages/go/struct-extractor.d.ts.map +1 -0
- package/dist/languages/go/struct-extractor.js +483 -0
- package/dist/languages/go/struct-extractor.js.map +1 -0
- package/dist/languages/go/tag-parser.d.ts +62 -0
- package/dist/languages/go/tag-parser.d.ts.map +1 -0
- package/dist/languages/go/tag-parser.js +108 -0
- package/dist/languages/go/tag-parser.js.map +1 -0
- package/dist/languages/go/type-converter.d.ts +32 -0
- package/dist/languages/go/type-converter.d.ts.map +1 -0
- package/dist/languages/go/type-converter.js +226 -0
- package/dist/languages/go/type-converter.js.map +1 -0
- package/dist/languages/go/types.d.ts +153 -0
- package/dist/languages/go/types.d.ts.map +1 -0
- package/dist/languages/go/types.js +6 -0
- package/dist/languages/go/types.js.map +1 -0
- package/dist/languages/import-resolver.d.ts +645 -0
- package/dist/languages/import-resolver.d.ts.map +1 -0
- package/dist/languages/import-resolver.js +1278 -0
- package/dist/languages/import-resolver.js.map +1 -0
- package/dist/languages/index.d.ts +34 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +93 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/json-schema.d.ts +40 -0
- package/dist/languages/json-schema.d.ts.map +1 -0
- package/dist/languages/json-schema.js +188 -0
- package/dist/languages/json-schema.js.map +1 -0
- package/dist/languages/python-ast/index.d.ts +8 -0
- package/dist/languages/python-ast/index.d.ts.map +1 -0
- package/dist/languages/python-ast/index.js +7 -0
- package/dist/languages/python-ast/index.js.map +1 -0
- package/dist/languages/python-ast/parser.d.ts +174 -0
- package/dist/languages/python-ast/parser.d.ts.map +1 -0
- package/dist/languages/python-ast/parser.js +1205 -0
- package/dist/languages/python-ast/parser.js.map +1 -0
- package/dist/languages/python-ast/type-resolver.d.ts +75 -0
- package/dist/languages/python-ast/type-resolver.d.ts.map +1 -0
- package/dist/languages/python-ast/type-resolver.js +421 -0
- package/dist/languages/python-ast/type-resolver.js.map +1 -0
- package/dist/languages/python-ast/types.d.ts +216 -0
- package/dist/languages/python-ast/types.d.ts.map +1 -0
- package/dist/languages/python-ast/types.js +6 -0
- package/dist/languages/python-ast/types.js.map +1 -0
- package/dist/languages/python.d.ts +55 -0
- package/dist/languages/python.d.ts.map +1 -0
- package/dist/languages/python.js +311 -0
- package/dist/languages/python.js.map +1 -0
- package/dist/languages/typescript.d.ts +272 -0
- package/dist/languages/typescript.d.ts.map +1 -0
- package/dist/languages/typescript.js +1381 -0
- package/dist/languages/typescript.js.map +1 -0
- package/dist/patterns/base.d.ts +146 -0
- package/dist/patterns/base.d.ts.map +1 -0
- package/dist/patterns/base.js +89 -0
- package/dist/patterns/base.js.map +1 -0
- package/dist/patterns/errors.d.ts +172 -0
- package/dist/patterns/errors.d.ts.map +1 -0
- package/dist/patterns/errors.js +185 -0
- package/dist/patterns/errors.js.map +1 -0
- package/dist/patterns/extractors.d.ts +170 -0
- package/dist/patterns/extractors.d.ts.map +1 -0
- package/dist/patterns/extractors.js +305 -0
- package/dist/patterns/extractors.js.map +1 -0
- package/dist/patterns/graphql/apollo-client.d.ts +80 -0
- package/dist/patterns/graphql/apollo-client.d.ts.map +1 -0
- package/dist/patterns/graphql/apollo-client.js +800 -0
- package/dist/patterns/graphql/apollo-client.js.map +1 -0
- package/dist/patterns/graphql/apollo-server.d.ts +55 -0
- package/dist/patterns/graphql/apollo-server.d.ts.map +1 -0
- package/dist/patterns/graphql/apollo-server.js +523 -0
- package/dist/patterns/graphql/apollo-server.js.map +1 -0
- package/dist/patterns/graphql/index.d.ts +11 -0
- package/dist/patterns/graphql/index.d.ts.map +1 -0
- package/dist/patterns/graphql/index.js +12 -0
- package/dist/patterns/graphql/index.js.map +1 -0
- package/dist/patterns/graphql/types.d.ts +213 -0
- package/dist/patterns/graphql/types.d.ts.map +1 -0
- package/dist/patterns/graphql/types.js +16 -0
- package/dist/patterns/graphql/types.js.map +1 -0
- package/dist/patterns/http-clients/axios.d.ts +148 -0
- package/dist/patterns/http-clients/axios.d.ts.map +1 -0
- package/dist/patterns/http-clients/axios.js +652 -0
- package/dist/patterns/http-clients/axios.js.map +1 -0
- package/dist/patterns/http-clients/fetch.d.ts +88 -0
- package/dist/patterns/http-clients/fetch.d.ts.map +1 -0
- package/dist/patterns/http-clients/fetch.js +364 -0
- package/dist/patterns/http-clients/fetch.js.map +1 -0
- package/dist/patterns/http-clients/index.d.ts +36 -0
- package/dist/patterns/http-clients/index.d.ts.map +1 -0
- package/dist/patterns/http-clients/index.js +50 -0
- package/dist/patterns/http-clients/index.js.map +1 -0
- package/dist/patterns/http-clients/property-access.d.ts +46 -0
- package/dist/patterns/http-clients/property-access.d.ts.map +1 -0
- package/dist/patterns/http-clients/property-access.js +818 -0
- package/dist/patterns/http-clients/property-access.js.map +1 -0
- package/dist/patterns/http-clients/type-inference.d.ts +48 -0
- package/dist/patterns/http-clients/type-inference.d.ts.map +1 -0
- package/dist/patterns/http-clients/type-inference.js +293 -0
- package/dist/patterns/http-clients/type-inference.js.map +1 -0
- package/dist/patterns/http-clients/types.d.ts +168 -0
- package/dist/patterns/http-clients/types.d.ts.map +1 -0
- package/dist/patterns/http-clients/types.js +10 -0
- package/dist/patterns/http-clients/types.js.map +1 -0
- package/dist/patterns/http-clients/url-extractor.d.ts +53 -0
- package/dist/patterns/http-clients/url-extractor.d.ts.map +1 -0
- package/dist/patterns/http-clients/url-extractor.js +338 -0
- package/dist/patterns/http-clients/url-extractor.js.map +1 -0
- package/dist/patterns/index.d.ts +44 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +49 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/python/aiohttp.d.ts +21 -0
- package/dist/patterns/python/aiohttp.d.ts.map +1 -0
- package/dist/patterns/python/aiohttp.js +188 -0
- package/dist/patterns/python/aiohttp.js.map +1 -0
- package/dist/patterns/python/httpx.d.ts +20 -0
- package/dist/patterns/python/httpx.d.ts.map +1 -0
- package/dist/patterns/python/httpx.js +183 -0
- package/dist/patterns/python/httpx.js.map +1 -0
- package/dist/patterns/python/index.d.ts +32 -0
- package/dist/patterns/python/index.d.ts.map +1 -0
- package/dist/patterns/python/index.js +63 -0
- package/dist/patterns/python/index.js.map +1 -0
- package/dist/patterns/python/property-access.d.ts +27 -0
- package/dist/patterns/python/property-access.d.ts.map +1 -0
- package/dist/patterns/python/property-access.js +132 -0
- package/dist/patterns/python/property-access.js.map +1 -0
- package/dist/patterns/python/requests.d.ts +19 -0
- package/dist/patterns/python/requests.d.ts.map +1 -0
- package/dist/patterns/python/requests.js +239 -0
- package/dist/patterns/python/requests.js.map +1 -0
- package/dist/patterns/python/types.d.ts +95 -0
- package/dist/patterns/python/types.d.ts.map +1 -0
- package/dist/patterns/python/types.js +43 -0
- package/dist/patterns/python/types.js.map +1 -0
- package/dist/patterns/registry.d.ts +181 -0
- package/dist/patterns/registry.d.ts.map +1 -0
- package/dist/patterns/registry.js +304 -0
- package/dist/patterns/registry.js.map +1 -0
- package/dist/patterns/rest/express.d.ts +78 -0
- package/dist/patterns/rest/express.d.ts.map +1 -0
- package/dist/patterns/rest/express.js +289 -0
- package/dist/patterns/rest/express.js.map +1 -0
- package/dist/patterns/rest/fastify.d.ts +93 -0
- package/dist/patterns/rest/fastify.d.ts.map +1 -0
- package/dist/patterns/rest/fastify.js +420 -0
- package/dist/patterns/rest/fastify.js.map +1 -0
- package/dist/patterns/rest/index.d.ts +31 -0
- package/dist/patterns/rest/index.d.ts.map +1 -0
- package/dist/patterns/rest/index.js +45 -0
- package/dist/patterns/rest/index.js.map +1 -0
- package/dist/patterns/rest/middleware.d.ts +25 -0
- package/dist/patterns/rest/middleware.d.ts.map +1 -0
- package/dist/patterns/rest/middleware.js +219 -0
- package/dist/patterns/rest/middleware.js.map +1 -0
- package/dist/patterns/rest/path-parser.d.ts +50 -0
- package/dist/patterns/rest/path-parser.d.ts.map +1 -0
- package/dist/patterns/rest/path-parser.js +137 -0
- package/dist/patterns/rest/path-parser.js.map +1 -0
- package/dist/patterns/rest/response-inference.d.ts +44 -0
- package/dist/patterns/rest/response-inference.d.ts.map +1 -0
- package/dist/patterns/rest/response-inference.js +218 -0
- package/dist/patterns/rest/response-inference.js.map +1 -0
- package/dist/patterns/rest/types.d.ts +102 -0
- package/dist/patterns/rest/types.d.ts.map +1 -0
- package/dist/patterns/rest/types.js +10 -0
- package/dist/patterns/rest/types.js.map +1 -0
- package/dist/patterns/types.d.ts +105 -0
- package/dist/patterns/types.d.ts.map +1 -0
- package/dist/patterns/types.js +11 -0
- package/dist/patterns/types.js.map +1 -0
- package/dist/report/index.d.ts +11 -0
- package/dist/report/index.d.ts.map +1 -0
- package/dist/report/index.js +55 -0
- package/dist/report/index.js.map +1 -0
- package/dist/tools/contract-comments.d.ts +48 -0
- package/dist/tools/contract-comments.d.ts.map +1 -0
- package/dist/tools/contract-comments.js +130 -0
- package/dist/tools/contract-comments.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/scaffold.d.ts +38 -0
- package/dist/tools/scaffold.d.ts.map +1 -0
- package/dist/tools/scaffold.js +373 -0
- package/dist/tools/scaffold.js.map +1 -0
- package/dist/trace/index.d.ts +28 -0
- package/dist/trace/index.d.ts.map +1 -0
- package/dist/trace/index.js +45 -0
- package/dist/trace/index.js.map +1 -0
- package/dist/types.d.ts +135 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/dist/watch/cache.d.ts +41 -0
- package/dist/watch/cache.d.ts.map +1 -0
- package/dist/watch/cache.js +230 -0
- package/dist/watch/cache.js.map +1 -0
- package/dist/watch/index.d.ts +9 -0
- package/dist/watch/index.d.ts.map +1 -0
- package/dist/watch/index.js +7 -0
- package/dist/watch/index.js.map +1 -0
- package/dist/watch/project.d.ts +128 -0
- package/dist/watch/project.d.ts.map +1 -0
- package/dist/watch/project.js +152 -0
- package/dist/watch/project.js.map +1 -0
- package/dist/watch/watcher.d.ts +76 -0
- package/dist/watch/watcher.d.ts.map +1 -0
- package/dist/watch/watcher.js +235 -0
- package/dist/watch/watcher.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../../src/adapters/trpc/extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 📋 tRPC Schema Adapter Module
|
|
3
|
+
*
|
|
4
|
+
* Exports for tRPC router schema extraction and normalization.
|
|
5
|
+
*
|
|
6
|
+
* This module provides tools to extract Zod schemas from tRPC
|
|
7
|
+
* router definitions and convert them to the framework's
|
|
8
|
+
* NormalizedSchema format for contract validation.
|
|
9
|
+
*
|
|
10
|
+
* @module adapters/trpc
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { TRPCAdapter, parseTRPCRef, buildTRPCRefId } from './adapters/trpc/index.js';
|
|
15
|
+
*
|
|
16
|
+
* // Use the adapter directly
|
|
17
|
+
* const adapter = new TRPCAdapter();
|
|
18
|
+
* const schema = await adapter.extract({
|
|
19
|
+
* source: 'trpc',
|
|
20
|
+
* id: 'trpc:users.getById@./router.ts'
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* // Or parse/build ref IDs manually
|
|
24
|
+
* const ref = parseTRPCRef('trpc:users.create.output@./router.ts');
|
|
25
|
+
* const id = buildTRPCRefId('users.create', 'output', './router.ts');
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export { TRPCAdapter } from './adapter.js';
|
|
29
|
+
export { parseTRPCRef, buildTRPCRefId, type TRPCRef } from './parser.js';
|
|
30
|
+
export { extractProcedures, createProject, type ProcedureInfo, } from './extractor.js';
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/trpc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAMH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAM3C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAMzE,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 📋 tRPC Schema Adapter Module
|
|
3
|
+
*
|
|
4
|
+
* Exports for tRPC router schema extraction and normalization.
|
|
5
|
+
*
|
|
6
|
+
* This module provides tools to extract Zod schemas from tRPC
|
|
7
|
+
* router definitions and convert them to the framework's
|
|
8
|
+
* NormalizedSchema format for contract validation.
|
|
9
|
+
*
|
|
10
|
+
* @module adapters/trpc
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { TRPCAdapter, parseTRPCRef, buildTRPCRefId } from './adapters/trpc/index.js';
|
|
15
|
+
*
|
|
16
|
+
* // Use the adapter directly
|
|
17
|
+
* const adapter = new TRPCAdapter();
|
|
18
|
+
* const schema = await adapter.extract({
|
|
19
|
+
* source: 'trpc',
|
|
20
|
+
* id: 'trpc:users.getById@./router.ts'
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* // Or parse/build ref IDs manually
|
|
24
|
+
* const ref = parseTRPCRef('trpc:users.create.output@./router.ts');
|
|
25
|
+
* const id = buildTRPCRefId('users.create', 'output', './router.ts');
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// Adapter
|
|
30
|
+
// ============================================================================
|
|
31
|
+
export { TRPCAdapter } from './adapter.js';
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Parser Utilities
|
|
34
|
+
// ============================================================================
|
|
35
|
+
export { parseTRPCRef, buildTRPCRefId } from './parser.js';
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Extractor Utilities
|
|
38
|
+
// ============================================================================
|
|
39
|
+
export { extractProcedures, createProject, } from './extractor.js';
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/trpc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,OAAO,EAAE,YAAY,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAC;AAEzE,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,OAAO,EACL,iBAAiB,EACjB,aAAa,GAEd,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🔗 tRPC Ref ID Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses and builds SchemaRef ID strings for the tRPC adapter.
|
|
5
|
+
*
|
|
6
|
+
* The tRPC adapter uses structured reference IDs to identify
|
|
7
|
+
* specific schemas within tRPC router files. Each ID encodes:
|
|
8
|
+
* - The procedure path (e.g., `users.getById`)
|
|
9
|
+
* - The schema type (`input` or `output`)
|
|
10
|
+
* - The source file path
|
|
11
|
+
*
|
|
12
|
+
* This module provides utilities to parse these IDs and
|
|
13
|
+
* reconstruct them from components.
|
|
14
|
+
*
|
|
15
|
+
* @module adapters/trpc/parser
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Parsed components of a tRPC reference ID.
|
|
19
|
+
*
|
|
20
|
+
* Reference IDs encode the procedure path, schema type, and file path:
|
|
21
|
+
* - `trpc:users.getById@./router.ts` - Input schema (default)
|
|
22
|
+
* - `trpc:users.getById.input@./router.ts` - Explicit input
|
|
23
|
+
* - `trpc:users.getById.output@./router.ts` - Output schema
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const ref: TRPCRef = {
|
|
28
|
+
* path: 'users.getById',
|
|
29
|
+
* schemaType: 'input',
|
|
30
|
+
* filePath: './server/routers/user.ts'
|
|
31
|
+
* };
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export interface TRPCRef {
|
|
35
|
+
/**
|
|
36
|
+
* Procedure path using dot notation.
|
|
37
|
+
* For nested routers, this includes the full path (e.g., `users.posts.list`).
|
|
38
|
+
*/
|
|
39
|
+
path: string;
|
|
40
|
+
/**
|
|
41
|
+
* Schema type to extract.
|
|
42
|
+
* - `input`: The procedure's input validation schema (from `.input()`)
|
|
43
|
+
* - `output`: The procedure's output validation schema (from `.output()`)
|
|
44
|
+
*/
|
|
45
|
+
schemaType: 'input' | 'output';
|
|
46
|
+
/** Path to the TypeScript source file containing the router */
|
|
47
|
+
filePath: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Parse a tRPC reference ID string into its components.
|
|
51
|
+
*
|
|
52
|
+
* Supported formats:
|
|
53
|
+
* - `trpc:{path}@{file}` - Default (input schema)
|
|
54
|
+
* - `trpc:{path}.input@{file}` - Explicit input schema
|
|
55
|
+
* - `trpc:{path}.output@{file}` - Explicit output schema
|
|
56
|
+
*
|
|
57
|
+
* The parser handles these edge cases:
|
|
58
|
+
* - Empty or null input → returns null
|
|
59
|
+
* - Missing `trpc:` prefix → returns null
|
|
60
|
+
* - Missing `@` separator → returns null
|
|
61
|
+
* - Empty path or file → returns null
|
|
62
|
+
*
|
|
63
|
+
* @param refId - The tRPC reference ID string to parse
|
|
64
|
+
* @returns Parsed TRPCRef object, or null if the ID is invalid
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* // Parse a default (input) reference
|
|
69
|
+
* parseTRPCRef('trpc:users.getById@./router.ts')
|
|
70
|
+
* // → { path: 'users.getById', schemaType: 'input', filePath: './router.ts' }
|
|
71
|
+
*
|
|
72
|
+
* // Parse an explicit output reference
|
|
73
|
+
* parseTRPCRef('trpc:users.create.output@./router.ts')
|
|
74
|
+
* // → { path: 'users.create', schemaType: 'output', filePath: './router.ts' }
|
|
75
|
+
*
|
|
76
|
+
* // Handle nested router paths
|
|
77
|
+
* parseTRPCRef('trpc:admin.users.permissions.grant@./router.ts')
|
|
78
|
+
* // → { path: 'admin.users.permissions.grant', schemaType: 'input', filePath: './router.ts' }
|
|
79
|
+
*
|
|
80
|
+
* // Invalid inputs return null
|
|
81
|
+
* parseTRPCRef('invalid') // → null
|
|
82
|
+
* parseTRPCRef('') // → null
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function parseTRPCRef(refId: string): TRPCRef | null;
|
|
86
|
+
/**
|
|
87
|
+
* Build a tRPC reference ID string from its components.
|
|
88
|
+
*
|
|
89
|
+
* This is the inverse of `parseTRPCRef` - it takes parsed
|
|
90
|
+
* components and constructs a valid reference ID string.
|
|
91
|
+
*
|
|
92
|
+
* Format conventions:
|
|
93
|
+
* - Input schemas use the default format without `.input` suffix
|
|
94
|
+
* - Output schemas explicitly include the `.output` suffix
|
|
95
|
+
* - This keeps the common case (input) shorter
|
|
96
|
+
*
|
|
97
|
+
* @param path - Procedure path using dot notation (e.g., `users.getById`)
|
|
98
|
+
* @param schemaType - Schema type: `'input'` or `'output'`
|
|
99
|
+
* @param filePath - Path to the source file containing the router
|
|
100
|
+
* @returns The formatted tRPC reference ID string
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* // Build an input reference (default, no suffix)
|
|
105
|
+
* buildTRPCRefId('users.getById', 'input', './router.ts')
|
|
106
|
+
* // → 'trpc:users.getById@./router.ts'
|
|
107
|
+
*
|
|
108
|
+
* // Build an output reference (explicit suffix)
|
|
109
|
+
* buildTRPCRefId('users.create', 'output', './router.ts')
|
|
110
|
+
* // → 'trpc:users.create.output@./router.ts'
|
|
111
|
+
*
|
|
112
|
+
* // Round-trip example
|
|
113
|
+
* const ref = parseTRPCRef('trpc:users.list@./router.ts');
|
|
114
|
+
* const id = buildTRPCRefId(ref.path, ref.schemaType, ref.filePath);
|
|
115
|
+
* // id === 'trpc:users.list@./router.ts'
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
export declare function buildTRPCRefId(path: string, schemaType: 'input' | 'output', filePath: string): string;
|
|
119
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/adapters/trpc/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,UAAU,EAAE,OAAO,GAAG,QAAQ,CAAC;IAE/B,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAmC1D;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,OAAO,GAAG,QAAQ,EAC9B,QAAQ,EAAE,MAAM,GACf,MAAM,CAMR"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🔗 tRPC Ref ID Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses and builds SchemaRef ID strings for the tRPC adapter.
|
|
5
|
+
*
|
|
6
|
+
* The tRPC adapter uses structured reference IDs to identify
|
|
7
|
+
* specific schemas within tRPC router files. Each ID encodes:
|
|
8
|
+
* - The procedure path (e.g., `users.getById`)
|
|
9
|
+
* - The schema type (`input` or `output`)
|
|
10
|
+
* - The source file path
|
|
11
|
+
*
|
|
12
|
+
* This module provides utilities to parse these IDs and
|
|
13
|
+
* reconstruct them from components.
|
|
14
|
+
*
|
|
15
|
+
* @module adapters/trpc/parser
|
|
16
|
+
*/
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Parsing
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Parse a tRPC reference ID string into its components.
|
|
22
|
+
*
|
|
23
|
+
* Supported formats:
|
|
24
|
+
* - `trpc:{path}@{file}` - Default (input schema)
|
|
25
|
+
* - `trpc:{path}.input@{file}` - Explicit input schema
|
|
26
|
+
* - `trpc:{path}.output@{file}` - Explicit output schema
|
|
27
|
+
*
|
|
28
|
+
* The parser handles these edge cases:
|
|
29
|
+
* - Empty or null input → returns null
|
|
30
|
+
* - Missing `trpc:` prefix → returns null
|
|
31
|
+
* - Missing `@` separator → returns null
|
|
32
|
+
* - Empty path or file → returns null
|
|
33
|
+
*
|
|
34
|
+
* @param refId - The tRPC reference ID string to parse
|
|
35
|
+
* @returns Parsed TRPCRef object, or null if the ID is invalid
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* // Parse a default (input) reference
|
|
40
|
+
* parseTRPCRef('trpc:users.getById@./router.ts')
|
|
41
|
+
* // → { path: 'users.getById', schemaType: 'input', filePath: './router.ts' }
|
|
42
|
+
*
|
|
43
|
+
* // Parse an explicit output reference
|
|
44
|
+
* parseTRPCRef('trpc:users.create.output@./router.ts')
|
|
45
|
+
* // → { path: 'users.create', schemaType: 'output', filePath: './router.ts' }
|
|
46
|
+
*
|
|
47
|
+
* // Handle nested router paths
|
|
48
|
+
* parseTRPCRef('trpc:admin.users.permissions.grant@./router.ts')
|
|
49
|
+
* // → { path: 'admin.users.permissions.grant', schemaType: 'input', filePath: './router.ts' }
|
|
50
|
+
*
|
|
51
|
+
* // Invalid inputs return null
|
|
52
|
+
* parseTRPCRef('invalid') // → null
|
|
53
|
+
* parseTRPCRef('') // → null
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export function parseTRPCRef(refId) {
|
|
57
|
+
// Must have trpc: prefix
|
|
58
|
+
if (!refId || !refId.startsWith('trpc:')) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
// Remove prefix
|
|
62
|
+
const rest = refId.slice(5); // 'trpc:'.length
|
|
63
|
+
// Must have @ separator
|
|
64
|
+
const atIndex = rest.lastIndexOf('@');
|
|
65
|
+
if (atIndex === -1 || atIndex === 0) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const pathPart = rest.slice(0, atIndex);
|
|
69
|
+
const filePath = rest.slice(atIndex + 1);
|
|
70
|
+
if (!pathPart || !filePath) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
// Determine schema type and actual path
|
|
74
|
+
let schemaType = 'input';
|
|
75
|
+
let path = pathPart;
|
|
76
|
+
if (pathPart.endsWith('.input')) {
|
|
77
|
+
schemaType = 'input';
|
|
78
|
+
path = pathPart.slice(0, -6); // '.input'.length
|
|
79
|
+
}
|
|
80
|
+
else if (pathPart.endsWith('.output')) {
|
|
81
|
+
schemaType = 'output';
|
|
82
|
+
path = pathPart.slice(0, -7); // '.output'.length
|
|
83
|
+
}
|
|
84
|
+
return { path, schemaType, filePath };
|
|
85
|
+
}
|
|
86
|
+
// ============================================================================
|
|
87
|
+
// Building
|
|
88
|
+
// ============================================================================
|
|
89
|
+
/**
|
|
90
|
+
* Build a tRPC reference ID string from its components.
|
|
91
|
+
*
|
|
92
|
+
* This is the inverse of `parseTRPCRef` - it takes parsed
|
|
93
|
+
* components and constructs a valid reference ID string.
|
|
94
|
+
*
|
|
95
|
+
* Format conventions:
|
|
96
|
+
* - Input schemas use the default format without `.input` suffix
|
|
97
|
+
* - Output schemas explicitly include the `.output` suffix
|
|
98
|
+
* - This keeps the common case (input) shorter
|
|
99
|
+
*
|
|
100
|
+
* @param path - Procedure path using dot notation (e.g., `users.getById`)
|
|
101
|
+
* @param schemaType - Schema type: `'input'` or `'output'`
|
|
102
|
+
* @param filePath - Path to the source file containing the router
|
|
103
|
+
* @returns The formatted tRPC reference ID string
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* // Build an input reference (default, no suffix)
|
|
108
|
+
* buildTRPCRefId('users.getById', 'input', './router.ts')
|
|
109
|
+
* // → 'trpc:users.getById@./router.ts'
|
|
110
|
+
*
|
|
111
|
+
* // Build an output reference (explicit suffix)
|
|
112
|
+
* buildTRPCRefId('users.create', 'output', './router.ts')
|
|
113
|
+
* // → 'trpc:users.create.output@./router.ts'
|
|
114
|
+
*
|
|
115
|
+
* // Round-trip example
|
|
116
|
+
* const ref = parseTRPCRef('trpc:users.list@./router.ts');
|
|
117
|
+
* const id = buildTRPCRefId(ref.path, ref.schemaType, ref.filePath);
|
|
118
|
+
* // id === 'trpc:users.list@./router.ts'
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
export function buildTRPCRefId(path, schemaType, filePath) {
|
|
122
|
+
// Default (input) doesn't need suffix for brevity
|
|
123
|
+
if (schemaType === 'input') {
|
|
124
|
+
return `trpc:${path}@${filePath}`;
|
|
125
|
+
}
|
|
126
|
+
return `trpc:${path}.${schemaType}@${filePath}`;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/adapters/trpc/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAyCH,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,yBAAyB;IACzB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;IAChB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB;IAE9C,wBAAwB;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAEzC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAwC;IACxC,IAAI,UAAU,GAAuB,OAAO,CAAC;IAC7C,IAAI,IAAI,GAAG,QAAQ,CAAC;IAEpB,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,UAAU,GAAG,OAAO,CAAC;QACrB,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB;IAClD,CAAC;SAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,UAAU,GAAG,QAAQ,CAAC;QACtB,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;IACnD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC;AAED,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,UAA8B,EAC9B,QAAgB;IAEhB,kDAAkD;IAClD,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,QAAQ,IAAI,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace MCP - Schema Comparator
|
|
3
|
+
* Compares producer schemas (backend) against consumer usage (frontend)
|
|
4
|
+
*/
|
|
5
|
+
import type { ProducerSchema, ConsumerSchema, TraceResult, Mismatch } from '../types.js';
|
|
6
|
+
import type { DataFlowDirection } from '../core/types.js';
|
|
7
|
+
export interface CompareOptions {
|
|
8
|
+
/** Strict mode: treat missing optional properties as warnings */
|
|
9
|
+
strict?: boolean;
|
|
10
|
+
/** Ignore certain property names */
|
|
11
|
+
ignoreProperties?: string[];
|
|
12
|
+
/**
|
|
13
|
+
* Data flow direction for compatibility checking
|
|
14
|
+
* - producer_to_consumer: API response flow (extra producer fields OK)
|
|
15
|
+
* - consumer_to_producer: API request flow (extra consumer fields OK)
|
|
16
|
+
* - bidirectional: Must match exactly
|
|
17
|
+
* @default "producer_to_consumer"
|
|
18
|
+
*/
|
|
19
|
+
direction?: DataFlowDirection;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Compare backend producer schemas against frontend consumer expectations
|
|
23
|
+
*/
|
|
24
|
+
export declare function compareSchemas(producers: ProducerSchema[], consumers: ConsumerSchema[], options?: CompareOptions): TraceResult;
|
|
25
|
+
/**
|
|
26
|
+
* Quick check: does producer provide all properties consumer expects?
|
|
27
|
+
*/
|
|
28
|
+
export declare function checkPropertyCoverage(producer: ProducerSchema, consumer: ConsumerSchema): Mismatch[];
|
|
29
|
+
/**
|
|
30
|
+
* Convenience function: Compare a backend directory against a frontend directory
|
|
31
|
+
*/
|
|
32
|
+
export declare function compareDirectories(backendDir: string, frontendDir: string, options?: CompareOptions): Promise<TraceResult>;
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compare/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAyB,MAAM,aAAa,CAAC;AAChH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,cAAc,EAAE,EAC3B,SAAS,EAAE,cAAc,EAAE,EAC3B,OAAO,GAAE,cAAmB,GAC3B,WAAW,CAgEb;AAuND;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,cAAc,GACvB,QAAQ,EAAE,CAEZ;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,CActB"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace MCP - Schema Comparator
|
|
3
|
+
* Compares producer schemas (backend) against consumer usage (frontend)
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Compare backend producer schemas against frontend consumer expectations
|
|
7
|
+
*/
|
|
8
|
+
export function compareSchemas(producers, consumers, options = {}) {
|
|
9
|
+
// Default to producer_to_consumer (API response pattern)
|
|
10
|
+
const direction = options.direction || 'producer_to_consumer';
|
|
11
|
+
if (process.env.DEBUG_TRACE_MCP) {
|
|
12
|
+
console.error(`[Comparator] Comparing ${producers.length} producers vs ${consumers.length} consumers`);
|
|
13
|
+
console.error(`[Comparator] Direction: ${direction}`);
|
|
14
|
+
}
|
|
15
|
+
const matches = [];
|
|
16
|
+
const mismatches = [];
|
|
17
|
+
// Index producers by tool name for quick lookup
|
|
18
|
+
const producerMap = new Map();
|
|
19
|
+
for (const producer of producers) {
|
|
20
|
+
producerMap.set(producer.toolName, producer);
|
|
21
|
+
}
|
|
22
|
+
// Analyze each consumer usage
|
|
23
|
+
for (const consumer of consumers) {
|
|
24
|
+
const producer = producerMap.get(consumer.toolName);
|
|
25
|
+
if (!producer) {
|
|
26
|
+
// Tool not found in producer definitions
|
|
27
|
+
mismatches.push({
|
|
28
|
+
toolName: consumer.toolName,
|
|
29
|
+
issueType: 'UNKNOWN_TOOL',
|
|
30
|
+
description: `Tool "${consumer.toolName}" is called but not defined in producer`,
|
|
31
|
+
consumerLocation: consumer.callSite,
|
|
32
|
+
});
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
// Check argument mismatches (consumer → producer direction)
|
|
36
|
+
const argMismatches = checkArgumentMismatches(producer, consumer, direction);
|
|
37
|
+
mismatches.push(...argMismatches);
|
|
38
|
+
// Check expected property mismatches (producer → consumer direction)
|
|
39
|
+
const propMismatches = checkPropertyMismatches(producer, consumer, options, direction);
|
|
40
|
+
mismatches.push(...propMismatches);
|
|
41
|
+
// If no mismatches for this call, it's a match
|
|
42
|
+
if (argMismatches.length === 0 && propMismatches.length === 0) {
|
|
43
|
+
matches.push({
|
|
44
|
+
toolName: consumer.toolName,
|
|
45
|
+
producerLocation: producer.location,
|
|
46
|
+
consumerLocation: consumer.callSite,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
timestamp: new Date().toISOString(),
|
|
52
|
+
producerSource: producers.length > 0 ? producers[0].location.file : '',
|
|
53
|
+
consumerSource: consumers.length > 0 ? consumers[0].callSite.file : '',
|
|
54
|
+
matches,
|
|
55
|
+
mismatches,
|
|
56
|
+
summary: {
|
|
57
|
+
totalTools: producers.length,
|
|
58
|
+
totalCalls: consumers.length,
|
|
59
|
+
matchCount: matches.length,
|
|
60
|
+
mismatchCount: mismatches.length,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check if consumer provides correct arguments to the tool
|
|
66
|
+
* This represents consumer → producer data flow (request direction)
|
|
67
|
+
*/
|
|
68
|
+
function checkArgumentMismatches(producer, consumer, direction) {
|
|
69
|
+
const mismatches = [];
|
|
70
|
+
const inputSchema = producer.inputSchema;
|
|
71
|
+
if (!inputSchema.properties) {
|
|
72
|
+
return mismatches;
|
|
73
|
+
}
|
|
74
|
+
const requiredArgs = inputSchema.required || [];
|
|
75
|
+
const definedArgs = Object.keys(inputSchema.properties);
|
|
76
|
+
const providedArgs = Object.keys(consumer.argumentsProvided);
|
|
77
|
+
// Check for missing required arguments
|
|
78
|
+
// This is ALWAYS an error regardless of direction
|
|
79
|
+
for (const required of requiredArgs) {
|
|
80
|
+
if (!providedArgs.includes(required)) {
|
|
81
|
+
mismatches.push({
|
|
82
|
+
toolName: consumer.toolName,
|
|
83
|
+
issueType: 'ARGUMENT_ERROR',
|
|
84
|
+
description: `Missing required argument "${required}"`,
|
|
85
|
+
producerLocation: producer.location,
|
|
86
|
+
consumerLocation: consumer.callSite,
|
|
87
|
+
details: { missingArg: required, providedArgs },
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Check for unknown arguments (consumer → producer direction)
|
|
92
|
+
// Treatment depends on direction:
|
|
93
|
+
// - consumer_to_producer: extra consumer args are OK (producer ignores them)
|
|
94
|
+
// - producer_to_consumer: this shouldn't happen for arguments (arguments go consumer → producer)
|
|
95
|
+
// - bidirectional: must match exactly
|
|
96
|
+
for (const provided of providedArgs) {
|
|
97
|
+
if (!definedArgs.includes(provided)) {
|
|
98
|
+
// For consumer_to_producer direction, extra consumer fields are acceptable (downgrade to warning)
|
|
99
|
+
const isError = direction !== 'consumer_to_producer';
|
|
100
|
+
// Check for similar names (potential typo or naming convention mismatch)
|
|
101
|
+
const similar = findSimilarName(provided, definedArgs);
|
|
102
|
+
if (isError) {
|
|
103
|
+
mismatches.push({
|
|
104
|
+
toolName: consumer.toolName,
|
|
105
|
+
issueType: 'ARGUMENT_ERROR',
|
|
106
|
+
description: similar
|
|
107
|
+
? `Unknown argument "${provided}" - did you mean "${similar}"?`
|
|
108
|
+
: `Unknown argument "${provided}" not in tool schema`,
|
|
109
|
+
producerLocation: producer.location,
|
|
110
|
+
consumerLocation: consumer.callSite,
|
|
111
|
+
details: { unknownArg: provided, definedArgs, suggestedArg: similar },
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// In consumer_to_producer mode, this is just informational
|
|
116
|
+
// (We don't have a warnings array in current schema, so skip for now)
|
|
117
|
+
// TODO: Add warnings support
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return mismatches;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Check if consumer expects properties that producer doesn't provide
|
|
125
|
+
* This represents producer → consumer data flow (response direction)
|
|
126
|
+
* This is the core mismatch detection (e.g., expecting "characterClass" but producer has "class")
|
|
127
|
+
*/
|
|
128
|
+
function checkPropertyMismatches(producer, consumer, options, direction) {
|
|
129
|
+
const mismatches = [];
|
|
130
|
+
const ignoreProps = options.ignoreProperties || [];
|
|
131
|
+
// For now, we can't fully know the output schema structure
|
|
132
|
+
// But we can detect common patterns and warn about potential issues
|
|
133
|
+
for (const expectedProp of consumer.expectedProperties) {
|
|
134
|
+
if (ignoreProps.includes(expectedProp))
|
|
135
|
+
continue;
|
|
136
|
+
// Check for common naming convention mismatches
|
|
137
|
+
const potentialMatch = detectNamingMismatch(expectedProp, producer);
|
|
138
|
+
if (potentialMatch) {
|
|
139
|
+
// Property mismatches in producer → consumer direction:
|
|
140
|
+
// - producer_to_consumer: consumer expects property producer doesn't have = ERROR
|
|
141
|
+
// - consumer_to_producer: not applicable (this checks response properties)
|
|
142
|
+
// - bidirectional: must match = ERROR
|
|
143
|
+
const isError = direction !== 'consumer_to_producer';
|
|
144
|
+
if (isError) {
|
|
145
|
+
mismatches.push({
|
|
146
|
+
toolName: consumer.toolName,
|
|
147
|
+
issueType: 'MISSING_PROPERTY',
|
|
148
|
+
description: `Consumer expects "${expectedProp}" but producer has "${potentialMatch}"`,
|
|
149
|
+
producerLocation: producer.location,
|
|
150
|
+
consumerLocation: consumer.callSite,
|
|
151
|
+
details: {
|
|
152
|
+
expected: expectedProp,
|
|
153
|
+
actual: potentialMatch,
|
|
154
|
+
suggestion: `Change "${expectedProp}" to "${potentialMatch}" in consumer code`,
|
|
155
|
+
direction: direction,
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return mismatches;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Detect if expected property has a naming convention mismatch
|
|
165
|
+
*/
|
|
166
|
+
function detectNamingMismatch(expectedProp, producer) {
|
|
167
|
+
// Common patterns to check
|
|
168
|
+
const patterns = [
|
|
169
|
+
// characterClass vs class
|
|
170
|
+
[/^(.+)Class$/, (m) => m[1].toLowerCase()],
|
|
171
|
+
[/^(.+)_class$/, (m) => m[1]],
|
|
172
|
+
// className vs class
|
|
173
|
+
[/^class(.+)$/, (m) => m[1].toLowerCase()],
|
|
174
|
+
// charClass vs class
|
|
175
|
+
[/^char(.+)$/i, (m) => m[1].toLowerCase()],
|
|
176
|
+
];
|
|
177
|
+
// Check if expected property follows a pattern that suggests a simpler name in producer
|
|
178
|
+
for (const [pattern, transform] of patterns) {
|
|
179
|
+
const match = expectedProp.match(pattern);
|
|
180
|
+
if (match) {
|
|
181
|
+
const simpleName = transform(match);
|
|
182
|
+
// Check if producer's input schema has the simpler name
|
|
183
|
+
// (This is a heuristic - in reality we'd check the output)
|
|
184
|
+
if (producer.inputSchema.properties?.[simpleName]) {
|
|
185
|
+
return simpleName;
|
|
186
|
+
}
|
|
187
|
+
// Also check common variations
|
|
188
|
+
if (simpleName === 'class') {
|
|
189
|
+
return 'class'; // Known naming conflict with JS reserved word
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Find a similar name in a list (for typo detection)
|
|
197
|
+
*/
|
|
198
|
+
function findSimilarName(name, candidates) {
|
|
199
|
+
const nameLower = name.toLowerCase();
|
|
200
|
+
for (const candidate of candidates) {
|
|
201
|
+
const candidateLower = candidate.toLowerCase();
|
|
202
|
+
// Exact match (different case)
|
|
203
|
+
if (nameLower === candidateLower) {
|
|
204
|
+
return candidate;
|
|
205
|
+
}
|
|
206
|
+
// One is a suffix/prefix of the other
|
|
207
|
+
if (nameLower.includes(candidateLower) || candidateLower.includes(nameLower)) {
|
|
208
|
+
return candidate;
|
|
209
|
+
}
|
|
210
|
+
// Levenshtein distance <= 2
|
|
211
|
+
if (levenshteinDistance(nameLower, candidateLower) <= 2) {
|
|
212
|
+
return candidate;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Simple Levenshtein distance for typo detection
|
|
219
|
+
*/
|
|
220
|
+
function levenshteinDistance(a, b) {
|
|
221
|
+
const matrix = [];
|
|
222
|
+
for (let i = 0; i <= b.length; i++) {
|
|
223
|
+
matrix[i] = [i];
|
|
224
|
+
}
|
|
225
|
+
for (let j = 0; j <= a.length; j++) {
|
|
226
|
+
matrix[0][j] = j;
|
|
227
|
+
}
|
|
228
|
+
for (let i = 1; i <= b.length; i++) {
|
|
229
|
+
for (let j = 1; j <= a.length; j++) {
|
|
230
|
+
if (b[i - 1] === a[j - 1]) {
|
|
231
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return matrix[b.length][a.length];
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Quick check: does producer provide all properties consumer expects?
|
|
242
|
+
*/
|
|
243
|
+
export function checkPropertyCoverage(producer, consumer) {
|
|
244
|
+
return checkPropertyMismatches(producer, consumer, {}, 'producer_to_consumer');
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Convenience function: Compare a backend directory against a frontend directory
|
|
248
|
+
*/
|
|
249
|
+
export async function compareDirectories(backendDir, frontendDir, options = {}) {
|
|
250
|
+
// Import dynamically to avoid circular deps
|
|
251
|
+
const { extractProducerSchemas } = await import('../extract/index.js');
|
|
252
|
+
const { traceConsumerUsage } = await import('../trace/index.js');
|
|
253
|
+
if (process.env.DEBUG_TRACE_MCP) {
|
|
254
|
+
console.error(`[Compare] Backend: ${backendDir}`);
|
|
255
|
+
console.error(`[Compare] Frontend: ${frontendDir}`);
|
|
256
|
+
}
|
|
257
|
+
const producers = await extractProducerSchemas({ rootDir: backendDir });
|
|
258
|
+
const consumers = await traceConsumerUsage({ rootDir: frontendDir });
|
|
259
|
+
return compareSchemas(producers, consumers, options);
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=index.js.map
|